- 新しい順
- 投票が多い順
- コメントが多い順
質問内ではIAM IDと呼ばれていますが、用途から想像するとIAMではなく認証したCognitoのユーザーネームなどであると仮定して回答します。
Amplify Librariesの使い方ではなくReactコードの書き方の問題かと思われます。useEffectの第二引数に空配列を指定した場合、コンポーネントがレンダリングされた初回にしか処理が実行されません。
未検証ですが、記載されているコードでは初回レンダリング時のみ currentAuthenticatedUser()
が実行されるため常にnullがUserに書き込まれるのではないでしょうか。
下記のサンプルを参考に、Hub.listen()
内でsetUser
を呼び出すことを検討してみてはどうでしょう。
https://docs.amplify.aws/lib/auth/social/q/platform/js/#set-up-your-frontend
ご質問内の IAM ID
は、IAM ロールなど IAM 権限に紐づく ID 情報
でなく、認証を実施したユーザーを一意に識別できる情報
かとお見受けしております。[1]
上記認識にて下記へ引き続き回答を記載させていただきます。
回答
そもそもフロント側にてIAM IDを参照せずにIAMとUserTableを関連させる方法ってありますでしょうか?
恐れ入りますが、現在の Amplify Framework では、上記ご要望を満たすような機能等 ( ユーザーを一意に識別できる情報を参照せずに UserTable ( DynamoDB 等 ) からユーザーの関連情報を取得いただけるような機能等 ) は提供されていない状況でございます。
無いのであれば、IAM IDを採取する方法をおしえてください。
認証を実施したユーザーを一意に識別できる情報
に関しましては、currentAuthenticatedUser メソッドのレスポンス値から取得をいただけるかと存じます。
Amazon Cognito ではユーザープールに登録されたユーザーへ一意の ID となる sub 属性を付与いたします。[2]
currentAuthenticatedUser メソッドは Cognito リソースにて認証されたユーザー情報を含むデータを返却いたしますため、こちらの sub 属性の情報などが一意のユーザーID としてご活用いただけるかと存じます。[3]
上記情報がご要望に沿うものであるかご確認をいただけますと幸いです。
参考
[1] IAM ID
IAM は、ユーザー、ユーザーグループ、ロール、ポリシー、およびサーバー証明書に対していくつかの異なった ID を使います。
[2] ユーザープール属性
sub を除き、標準属性はすべてのユーザーに対してデフォルトでオプションとなります。属性を必須にする場合は、ユーザープールの作成プロセスで、属性の横にある [必須] チェックボックスをオンにします。Amazon Cognito は、各ユーザーの sub 属性に一意のユーザー識別子の値を割り当てます。
https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/user-pool-settings-attributes.html
[3] currentAuthenticatedUser
https://aws-amplify.github.io/amplify-js/api/classes/authclass.html#currentauthenticateduser
関連するコンテンツ
- 質問済み 1年前
- 質問済み 4年前
- 質問済み 12日前
- 質問済み 5年前
- AWS公式更新しました 1年前