AWSCognito User PoolJavaScriptNode.js

Cognito User Poolsでユーザー名とEmailのどちらからでもユーザー情報を取得できるようにする

タイトルの通りです。 背景 Cognito User Poolsはログイン時のIDにユーザー名・Email・電話番号の3つが利用できます。これはプールを作成する際にしか設定できませんので、これから試そうという方はご注意 […]

広告ここから
広告ここまで

タイトルの通りです。

背景

Cognito User Poolsはログイン時のIDにユーザー名・Email・電話番号の3つが利用できます。これはプールを作成する際にしか設定できませんので、これから試そうという方はご注意ください。

で、バックエンドを実装している時にちょっと困るのが、adminGetUser関数の挙動だったりします。ちょっとドキュメントを見てみましょう。

var params = {
  UserPoolId: 'STRING_VALUE', /* required */
  Username: 'STRING_VALUE' /* required */
};
cognitoidentityserviceprovider.adminGetUser(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

form: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#adminGetUser-property

はい。getではUsernameからしか取得できません。

ですがやはりEmail / 電話番号からユーザー名をひきたくなる時もありますので、こんな感じにしてやるとよさそうです。

Username / Emailどちらからでもひけるようにするヘルパー

username / emailどちらがくるかわからない想定なので、eventオブジェクトを拾ってそこから値を見る形にしています。

const AWS = require('aws-sdk')
const cognitoidp = new AWS.CognitoIdentityServiceProvider();

const getUser = async (event) => {
  const UserPoolId = process.env.USERPOOL_ID
  const Username = event.userName

  if (Username) {
      const getParams = {
        UserPoolId,
        Username
      }
      const user = await cognitoidp.adminGetUser(getParams).promise()
      // listUserはAttributesだけどadminGetUserはUserAttributesなので、プロパティを揃える
      if (!user.Attributes && user.UserAttributes) user.Attributes = user.UserAttributes
      return user
  } else {
      const params = {
        UserPoolIdd,
        Limit: 60,
        Filter: `email="${event.email}"`
      }
      const { Users } = await cognitoidp.listUsers(params).promise()
      if (Users && Users.length <= 0) {
        throw new Error('User not found')
      }
      return Users[0]
  }
}

listUserとadminGetUserで、userAttributesのプロパティ名が異なるので注意してください。今回のサンプルでは、listUserのプロパティ名に寄せる処理を間に入れています。

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts