aws-amplifyのAuthライブラリのメソッド一覧解説
はじめに
以前にidとpasswordでなく、取得したアクセストークンでログインできないかなーとAuthライブラリを眺めてました。するとメソッドがたくさんあって気になったので今回調べてみました。
使っているのはVersion 5.3.26です。
メソッド一覧
調べてみると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を見て書きましたが、使ってないメソッドばかりなので参考程度にお願いします。
こちらの記事ではより詳細な箇所もありました。
NCDC株式会社( ncdc.co.jp/ )のエンジニアチームです。 募集中のエンジニアのポジションや、採用している技術スタックの紹介などはこちら( github.com/ncdcdev/recruitment )をご覧ください! ※エンジニア以外も記事を投稿することがあります
Discussion