nodejsから、cognitoへのログイン
scriptタグだと、cognitoライブラリが大量かつ依存関係がややこしいので、パッケージ管理のnpmの面目躍如!
コマンドラインからは、これで良いんだけど、ブラウザのscriptタグではrequire()が使えないので、browserfyやwebpackでバンドルする必要があるのか・・・納得した!
やっぱり素直にamplifyを使うか…。
デスクトップで適当なフォルダを作って
1 2 3 4 5 6 7 8 |
# npmプロジェクト生成 npm init -y # awsのsdkをインストール npm install aws-sdk --save # cognitoのjsライブラリをインストール npm install amazon-cognito-identity-js --save # 認証トークン用ライブラリをインストール npm install jsonwebtoken --save |
cognitoのユーザは予め作成しておく。
ログイン処理をするindex.jsを作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
var jwt = require('jsonwebtoken'); var aws_cognito = require('amazon-cognito-identity-js'); // ユーザープール設定 var user_pool = new aws_cognito.CognitoUserPool({ UserPoolId : 'cognitoのユーザプールID', ClientId : 'cognitoのクライアントID' }); // ユーザー決定 const cognito_user = new aws_cognito.CognitoUser({ Username: '予め作っておいたユーザID', Pool: user_pool, }); // パスワードの設定 const authentication_details = new aws_cognito.AuthenticationDetails({ Password: '予め作っておいたユーザのパスワード', }); // ユーザープール/ユーザー/パスワードを使って認証 cognito_user.authenticateUser(authentication_details, { // 成功時 onSuccess(result){ // 認証完了トークンを取得。以降はこのトークンで認証済み確認 console.log(result.getAccessToken().getJwtToken()); var access_token = result.getAccessToken().getJwtToken(); var decoded = jwt.decode(access_token, {complete: true}); // 認証トークンの内容をテキスト出力 console.log(decoded); }, onFailure(err){ console.error(err); }, // #################################################################################### // 初回認証時はパスワードの変更が要求されるので、仮パスワードと同じパスワードを再設定する newPasswordRequired(user_attributes, required_attributes){ cognito_user.completeNewPasswordChallenge(authentication_details.password, user_attributes, this); }, // #################################################################################### }); |
実行すると、認証トークンが取得できる
1 |
node index.js |