🍎

aws-amplifyのAuthライブラリのメソッド一覧解説

2024/11/30に公開

はじめに

以前にidとpasswordでなく、取得したアクセストークンでログインできないかなーとAuthライブラリを眺めてました。するとメソッドがたくさんあって気になったので今回調べてみました。
使っているのはVersion 5.3.26です。
https://www.npmjs.com/package/aws-amplify

メソッド一覧

調べてみるとv5, v6やその他バージョンで引数やメソッドの存在などかなり変わっているので自分がどのバージョンなのかと、公式ドキュメントやファイルで直接見るのも大事ですね。

signUp

const user = await signUp({
  username: "ncdc@zenn.com",
  password: "ncdc",
  attributes: {
      email: "ncdc@zenn.com",
      phone_number: "+8112345678"
  }
});

ユーザ名、パスワードと任意で電話番号やメールアドレスなどの属性を用いてサインアップします。

confirmSignUp

const user = await confirmSignUp({
  username: "ncdc@zenn.com",
  confirmationCode: "123456"
});

届いた認証コードを指定してサインアップします。

resendSignUp

認証コードを再送します。

signIn

const user = await Auth.signIn(userName, password);

idとpassでサインインする。
返り値にはattributes, client, pool, signInUserSession, storageと情報が入っていました。
実行後はローカルストレージにログイン情報が追加されます。

confirmSignIn

confirmSignUp同様に認証コードを入力してサインインします。
signInには再送するresend関数がないみたいですね。

getMFAOptions

「これは以前、認証されたユーザがMFAOptionsを取得するために使用していたが、意味のある応答を返さなくなった。」とdocに書いているので使えないっぽいです。なんで消さないんだろう。。

getPreferredMFA

const preferredMFA = await Auth.getPreferredMFA(user);

2段階認証オプションの情報が返ってきます。SMSやEMAILなど。

setPreferredMFA

await Auth.setPreferredMFA(user, 'TOTP');

2段階認証の設定ができます。
TOTP、SMS、NOMFA、SMS_MFA、SOFTWARE_TOKEN_MFAと種類豊富です。

disableSMS, enableSMS

await Auth.disableSMS(user);

v6で非推奨となりました。updateMFAPreferenceが上位互換のメソッドで{sms: 'ENABLED | DISABLE'}と指定する方がいいらしいです。
v5にはないのでこれを使うしかなさそうです。

setupTOTP

const secretCode = await Auth.setupTOTP(user);
const setupUri = `otpauth://totp/AWSCognito:${user}?secret=${secretCode}&issuer=sample-app`;

このsetupUriを使ってQRコードを生成してそれを認証アプリで読み取り、表示された認証コードでサインアップするみたいです。

verifyTotpToken

const userSession = await Auth.verifyTotpToken(user, code);

認証アプリをcognitoに登録します。

completeNewPassword

const user = await Auth.signIn(username, password)
if (user.challengeName === 'NEW_PASSWORD_REQUIRED') {
    const user = await Auth.completeNewPassword(
        user,
        newPassword
    );
}

ログイン時に仮パスワードだった時にする処理です。
ファイルをみるとattributesでなくrequiredAttributesになってますが、ドキュメントは違いますね。優先順位としては個人ブログ<公式ドキュメント<ファイルでしょうか。

sendCustomChallengeAnswer

await Auth.sendCustomChallengeAnswer(user, verificationCode)

チャレンジレスポンスの認証コードを送信します。

deleteUserAttributes

await Auth.deleteUserAttributes(
    user,
    ["email"]
);

削除したいユーザーの属性のキーを指定します。

updateUserAttributes

await Auth.updateUserAttributes(
    user,
    { email: "zenn@ncdc.com" }
)

更新したいユーザーの属性のキーと情報を指定します。

deleteUser

await Auth.deleteUser();

ユーザーを削除します。

userAttributes

const attribute = await Auth.userAttributes(user);

ユーザーの属性を返します。

verifiedContact

検証済みの連絡方法(メールや電話番号など)のマップと、どの方法が検証済みかを示します。
v6ではfetchUserAttributesを推奨しています。

currentUserPoolUser, currentAuthenticatedUser

ユーザー情報が取得できます。
二つのレスポンスをみると全く同じでした。

currentCredentials, currentUserCredentials

クレデンシャル情報が取得できます。
二つのレスポンスをみると全く同じでした。

currentSession

トークン系が取得できます。

currentUserInfo

ユーザー属性が取得できます。currentUserAttributesに改名しても良さそう。

userSession

引数にユーザーを指定するところが違っているだけで、返ってくる情報はcurrentSessionと変わらないです。

verifyUserAttribute

await Auth.verifyUserAttribute(user, 'email');

属性確認リクエストの開始とあります。
メールアドレスや電話番号の認証をするための関数ですね。

verifyUserAttributeSubmit

await Auth.verifyUserAttribute(user, 'email', code);

認証コードを使って属性を登録します。

verifyCurrentUserAttribute

verifyUserAttributeと同様の機能ですが、currentUserとついているように、現在サインイン中のユーザーに対して行います。そのため引数にユーザー情報は渡しません。

verifyCurrentUserAttributeSubmit

verifyUserAttributeSubmitと同様の機能です。

signOut

await Auth.signOut();

サインアウトします。
これをするとローカルストレージからログイン情報が削除されます。

changePassword

await Auth.changePassword(user, olsPaddword, newPassword,);

パスワードを変更します。

forgotPassword

await Auth.forgotPassword(userName);

登録しているメールアドレスまたは電話番号に認証コードを送ります。

forgotPasswordSubmit

await Auth.forgotPassword(userName, code, newPassword);

forgotPasswordで入手した認証コードを使います。これでパスワードの変更ができます。

federatedSignIn

ソーシャルログインができるみたいですが、メソッドが引数の違いによって三つあるのでもし使う機会あれば別記事で出そうと思います。

essentialCredentials

currentCredentialsと同じ内容が返ってきました🤨

rememberDevice

多要素認証(MFA)を毎回やるとめんどくさいので、これを使うとそのデバイスは次から聞かれなくなるみたいです。

forgetDevice

rememberDeviceで記憶したデバイス情報を破棄します。

fetchDevices

記憶されているデバイスのリストを取得できます

以上

一応公式ドキュメントとファイルのdocを見て書きましたが、使ってないメソッドばかりなので参考程度にお願いします。
こちらの記事ではより詳細な箇所もありました。
https://qiita.com/too/items/54992bb871fc1a2ab101

NCDCエンジニアブログ

Discussion