Why Nostr? What is Njump?
2024-06-27 10:13:46

DevelopersIO RSS feed【非公式】 on Nostr: 【Amplify Gen2はユーザ名でログイン可能です】 ...

【Amplify Gen2はユーザ名でログイン可能です】
NTT東日本の中村です。 Amplify Gen1では、認証のログインにユーザ名を指定することができます、 Amplify Gen2では、ユーザ名を指定できないように見えますが、CDKを使えば実現できるようです。 概要 AmplifyのGen1,Gen2のどちらも、ユーザ認証のシステムに、内部でAmazon Cognitoを使用しています。 Amazon Cognitoは、認証のオプションにユーザ名、Eメール、電話番号を選択することができます。 マネジメントコンソールからAmazon Cognitoを作成すると、選択肢からユーザ名を選ぶことができます。 Amplify Gen1でも、amplify add Authを実行した時、選択肢にユーザ名(Username)を選ぶことができます。 Amplify Gen2は、auth/resource.tsの中で認証方法を定義しますが、emailとphoneのみが許可されており、ユーザ名を選ぶことができません。 Cognitoでは選べるが、Amplify Gen2では意図的にユーザ名でのログインが隠されている事が分かります。 ただし、移行ガイドを見ると「CDKで実現可能」と書かれています。 何故隠されているのか?と、どのように実現出来るのか?を調査しました。  調査してみた ユーザ名の取り扱いについて、こちらで書かれています。 何故隠されているのか Amazon Cognito では、ユーザー名は不変です。つまり、最初のサインアップ後は、ユーザーはユーザー名を変更できません。一部のアプリケーションでは、これは望ましくない場合があり、その場合はエイリアス属性を使用することをお勧めします。エイリアス属性を使用すると、不変のユーザー名に加えて、変更可能な「優先ユーザー名」を定義できます。 Username属性は不変であり、一度設定すると変更できません。この値をログインに使用すると、リスクが発生する場合がある、という判断を行っているようです。 ただし、Gen1からGen2へのマイグレーションを行う場合、既存ではユーザ名でログインを行っていたシステムも多く、ユーザ名でどうしてもログインしたい、というニーズは存在します。 どの様に実現できるのか ドキュメントを見ると、CDKのオーバーライドで、usernameAttributes属性からEメール、電話番号を取り除き、空配列で定義することで、ユーザ名でログインができるようです。 ちなみに、usernameAttributesに、preferred_username等の他のユーザー属性を設定することはできませんでした。 適当なログイン画面を用意します。 ログインに成功しました。 ログイン属性にユーザ名が使用されていることが分かります。 上の画像ではエイリアス属性と書かれていますが、実際には不変のUsername属性が使われており、変更することができません。 ユーザ名で問題なくログインできることも確認できました。 まとめ Gen2では、ユーザ名とパスワードでのログインを勧めておらず、エイリアス属性のEmailや電話番号を勧めています。ユーザ名は、一度設定すると変更ができない為です。 しかしながら、CDKからオーバーライドを行うことで、ユーザ名でのログインは可能なので、マイグレーション等で必須の対応がある時は検討できる選択肢だと思います。
https://dev.classmethod.jp/articles/amplify-can-login-by-username/
Author Public Key
npub16u6jx85wavk5n0kw5r46ma7dunupsp7acmtn3xys7keqvlsfjxpsar5q5c