AmplifyのAuthentication
Amazon Cognitoを使った認証を便利に扱うAPIを提供する
tokenの更新とかも自動でやってくれる
github
packages/auth
Auth.ts
packages/amazon-cognito-identity-js
docs
#WIP
Amplifyを使わずにCognitoを使ってAuth機能を作る
#??
どれ使えばいい?
aws-amplify/auth
webではこれ?
@aws-amplify/core
aws-amplify
RNではこれ?
ちゃんと見てないが、↑この辺は、amazon-cognito-identity-jsのwrapperらしい
Amplify.configureの項目の書いている場所
tokenは自動で保存される ref
Browserの場合は、localStorageに
RNの場合は、AsyncStorageに
Sign Inした時に保尊され、Sign Outすると削除される
AmplifyはlocalStorageに3つのtokenを保存する
API
https://zenn.dev/dove/articles/bb062581280b8d
https://aws-amplify.github.io/amplify-js/api/classes/authclass.html
https://qiita.com/too/items/54992bb871fc1a2ab101
ログイン情報取得系
currentAuthenticatedUser
ログイン中のuser情報を取得
bypassCacheというoptionがある
これ安全なのだろうか #??
#??
どこから参照している?
localStorage?
例えば、前回のsigninから何分経っていたら期限が切れたりする?
Cognitoのaccess tokenの有効期限は1hだからそれ?
currentSessionとの違いがいまいちわからん
https://docs.amplify.aws/lib/auth/manageusers/q/platform/js/#retrieve-current-authenticated-user
currentSession
CognitoUserSessionを返す
この中に、以下の3つが含まれている
CognitoのID token
Cognitoのaccess token
Cognitoのrefresh token
この関数を呼び出すだけで、Cognitoのrefresh tokenを使って、他2つの有効期限が更新される
https://docs.amplify.aws/lib/auth/manageusers/q/platform/js/#retrieve-current-session
currentCredentials
accessKeyIdやsecretAccessKeyなどを取得
currentUserCredentials
currentUserInfo
currentUserPoolUser
create user系
signUp
confirmSignUp
signUp時の認証
これで自動的にsign inさせるのは現状無理っぽい
https://github.com/aws-amplify/amplify-js/issues/6320
userはコード認証をした後に、パスワードを入力しないといけない
resendSignUp
signIn系
signIn
confirmSignIn
SNS認証などのsignIn
federatedSignIn
SNS認証系のなんか
signOut
変更
changePassword
forgotPassword
登録しているメールアドレスにパスワードの再設定の認証コードを送信
forgotPasswordSubmit
パスワード忘れの変更に対してコード認証
updateUserAttributes
Cognito UserPoolに保存しているemailやphoneNumberなどの情報の更新
verifyCurrentUserAttributeSubmit
email変更に対してコード認証
verifyCurrentUserAttribute
verifyCurrentUserAttributeSubmitのコードの再送信
2段階認証系
getPreferredMFA
setPreferredMFA
setupTOTP
verifyTotpToken
disableSMS
enableSMS
completeNewPassword
configure
https://docs.amplify.aws/lib/auth/start/q/platform/js/#re-use-existing-authentication-resource
essentialCredentials
getMFAOptions
getModuleName
sendCustomChallengeAnswer
userAttributes
userSession
verifiedContact
verifyUserAttribute
verifyUserAttributeSubmit
localstorage
idToken
ユーザープールに格納されている情報を確認するのに必要なJWTトークン
accessToken
ユーザープールの情報の更新のために必要なJWTトークン
refreshToken
idTokenやaccessTokenの有効期限が切れた時に、新しいものを取得するために必要なトークン
clockDrift
LastAuthUser
現在ログインしている(=最後にログインした)ユーザーの、ユーザープール上でのID
userData
ユーザープールに登録されている情報
deviceKey
randomPasswordKey
deviceGroupKey
#??
localstorageに保存している情報を見て、login状態にする方法
これ、signOutとか、引数無しでuser特定できるの何で?
どういう仕組み?
Login時の認証情報をaws側が管理している。たぶん
getCurrentUserで情報が取れる
https://github.com/aws-amplify/amplify-js/blob/HEAD/packages/auth/src/Auth.ts
delete userして、UserPoolからuserを消したい
code:ts
import { CognitoUser } from '@aws-amplify/auth';
export async function deleteUser() {
const user: CognitoUser = await Amplify.Auth.currentAuthenticatedUser();
await Amplify.Auth.signOut();
user.deleteUser(error => {
if (error) {
throw error;
}
});
}