AWS Cognitoユーザープールで「Cannot perform specific action because there does not exist a valid use pool domain associated with the user pool」エラー
AWS AmplifyでやってるけどCognitoのエラーのはず
AWS Amplifyの Auth.signUp()
を使って、事前に自分で作っておいたユーザープールにユーザーを追加しようとしたら、CognitoのAPIのレスポンス時に以下のエラーが発生した。
エラーが出ていても、コンソールで見るとユーザーはちゃんと追加されていた。一瞬何がおかしいのかと思ったが、よく見たら登録したメアドに確認メールが届いてないような。
原因は、 ユーザープールの設定で「Eメールの検証タイプを『リンク』にしていた」かつ「Cognitoのドメイン名を設定していなかった」 ことだった。
ドメイン名は左メニュー『アプリの統合』→『ドメイン名』から設定できる。独自ドメインじゃなくて、Cognitoのドメインのプレフィックスの方で大丈夫。
ドメイン名を設定したらこのエラーは出なくなったし、確認メールも届いた。
Eメールの検証タイプは、左メニュー『全般設定』→『メッセージのカスタマイズ』から変更できる。
検証タイプ『リンク』だと、ユーザー登録後に確認メールが届いて、そこに書かれてるリンクをクリックすることでメールアドレスが正しいことを確認する。よくあるやつ。
なんだけど、そのメールに書かれてるリンク先にCognitoのドメイン名が使用されるので、ドメイン名を設定してないとメールを送信できなくてエラーになるらしい。Cannot perform specific action
っていうのは、そのことを指してるっぽい。
検証タイプ『コード』だとこのエラーは発生しなかった。だからドメインが必要なのはメールの送信とかじゃなくて、確認用リンクの生成時だと思う。
[備考] aws-amplifyのバグ
この記事を書いてる時に使ってた aws-amplify
はバージョン1.2.2だったんだけど、Auth.signUp()
で InvalidParameterException
発生時に限り、エラーメッセージが特定の文言で上書きされておかしくなるという問題があった。
それのせいで、ずっと上記のエラーが出てたにもかかわらず、外から捕捉できるエラーメッセージが「Username could not be created. Please make sure that the username you have entered is between 1 and 128 characters.
」になってしまっていた。
実際に出てたエラーは以下の通り。
なお、経緯はちゃんと読んでないけど、これはつい4日前のコミット (94b7181) で修正された模様。
まだリリースには反映されてない。