はじめに
JavaScript用のSDKでAmazon Cognitoのユーザープールを使いログイン処理を実装する方法を紹介します。
事前準備として、次のライブラリが必要となるので、npmコマンドでインストールします。
- amazon-cognito-identity.min.js
スポンサーリンク
npm install amazon-cognito-identity-js
※npmコマンドはNode.jsをインストールすることで使うことができます。
【JavaScript SDK】Amazon Cognito(ユーザープール)の使い方
ライブラリの読み込み
事前準備で取得したライブラリを読み込みます。※パスは環境に応じて変更してください。
<script src="node_modules/amazon-cognito-identity-js/dist/amazon-cognito-identity.min.js"></script>
ログイン処理
ユーザープールの情報(ユーザープールID、クライアントID)と画面で入力された認証情報(ユーザー名とパスワード)を使用してログイン処理を実装することができます。
ログインに成功すると、アクセストークンやIDトークンなどが取得できます。
function login() { var poolData = { UserPoolId : 'ユーザープールID', ClientId : 'クライアントID' }; var username = "画面で入力されたユーザー名"; var password = "画面で入力されたパスワード"; var authenticationData = { Username : username, Password : password, }; var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData); var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData); var userData = { Username : username, Pool : userPool }; var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData); cognitoUser.authenticateUser(authenticationDetails, { onSuccess: function (result) { alert("ログイン成功"); // アクセストークン var accessToken = result.accessToken.jwtToken; // アクセストークの有効期限 var exp = result.accessToken.payload.exp; // IDトークン var idToken = result.idToken.jwtToken; // 更新トークン var refreshToken = result.refreshToken.token; // ログイン時の処理を書く... }, onFailure: function(err) { alert("ログイン失敗"); // ログイン失敗時の処理を書く... }, newPasswordRequired(userAttributes, requiredAttributes) { alert("ユーザーのステータスがFORCE_CHANGE_PASSWORD"); // 仮パスワードを確定させる cognitoUser.completeNewPasswordChallenge(password, {}, this); } }); }
アクセストークンやIDトークンには有効期限(デフォルトの設定は1時間と短い)があり、有効期限が切れるとトークン情報は無効になってしまうので、更新トークン(refreshToken)を使い、トークン情報を再取得するようにしましょう。※JavaScriptのSDKでは「getSession」でトークン情報を再取得することができます。
また、ユーザーのステータスが「FORCE_CHANGE_PASSWORD」の時は、仮のパスワードなので、正式なパスワードを再度設定する必要があります。
ただ上記例では「cognitoUser.completeNewPasswordChallenge」を呼び出し、仮のパスワードをそのまま正式なパスワードとして確定させています。
ログアウト処理
「getCurrentUser」で使用中のユーザープールが取得できるので、使用中のユーザープールを取得した後、「signOut」でログアウトすることができます。
function logout() { var poolData = { UserPoolId : 'ユーザープールID', ClientId : 'クライアントID' }; var userPool = AmazonCognitoIdentity.CognitoUserPool(poolData); var cognitoUser = userPool.getCurrentUser(); if (cognitoUser) { // ログアウト cognitoUser.signOut(); } // ログアウト時の処理を書く... }
終わりに
本記事では、JavaScript用のSDKでAmazon Cognitoのユーザープールを使いログイン処理を実装する方法を紹介しました。
次回は、getSessionでトークン情報を再取得する方法を紹介します。
[AWS 関連記事]
- Amazon Cognito ユーザープールの使い方
- Amazon Cognito IDプールの使い方
- Amazon S3へファイルをアップロードする方法
- Amazon S3からファイルをダウンロードする方法
- 【Amazon Cognito】changePasswordでパスワードを変更する方法