Amazon Cognito user poolのユーザーサインアップで”An error was encountered with the requested page.”となる際の対処

2022.03.26

こんにちは、CX事業本部 IoT事業部の若槻です。

以前のエントリAmazon Cognito user poolのユーザーサインアップ機能を扱った際に、サインアップ時にAn error was encountered with the requested page.というエラーメッセージが出て対処をしたので共有します。

事象

下記のようにしてAmazon Cognito user poolを作りました。

# user pool作成
$ USER_POOL_NAME=test-pool
$ aws cognito-idp create-user-pool \
  --pool-name ${USER_POOL_NAME} \
  --alias-attributes "email" \
  --schema Name=email,Required=true

# user pool domain作成
$ USER_POOL_ID=<USER_POOL_ID>
$ COGNITO_DOMAIN_NAME=20220326-test
$ aws cognito-idp create-user-pool-domain \
  --user-pool-id ${USER_POOL_ID} \
  --domain ${COGNITO_DOMAIN_NAME}

# user pool client作成
$ USER_POOL_CLIENT_NAME=test-client
$ REDIRECT_URL=https://classmethod.jp/
$ aws cognito-idp create-user-pool-client \
  --user-pool-id ${USER_POOL_ID} \
  --client-name ${USER_POOL_CLIENT_NAME} \
  --no-generate-secret \
  --supported-identity-providers "COGNITO" \
  --callback-urls ${REDIRECT_URL} \
  --logout-urls ${REDIRECT_URL} \
  --allowed-o-auth-flows "code" \
  --allowed-o-auth-scopes "phone" "email" "openid" "profile" "aws.cognito.signin.user.admin" \
  --allowed-o-auth-flows-user-pool-client

user pool clientのHosted UIのサインアップ画面のURLを作成します。

$ CLIENT_ID=<user pool clientID>
$ REDIRECT_URL=https%3A%2F%2Fclassmethod.jp%2F
$ REGION=ap-northeast-1
$ echo "https://${COGNITO_DOMAIN_NAME}.auth.${REGION}.amazoncognito.com/signup?response_type=code&client_id=${CLIENT_ID}&redirect_uri=${REDIRECT_URL}"

作成したURLにアクセスすると、サインアップ画面にアクセスできます。必要な情報を入力し、[Sign up]をクリック。

するとAn error was encountered with the requested page.というエラーメッセージが表示されました。

またメールアドレスのVeryfyメールは届いていません。

user poolのコンソールを見ると、ユーザーはメールアドレス未確認のステータスで登録されてはいました。

原因、解決

原因は、user poolの設定でユーザーアカウントのVerifyメッセージの送信が無効になっていたためでした。

user poolのサインアップエクスペリエンスの設定を確認すると、[Cognito が検証と確認のためにメッセージを自動的に送信することを許可]が無効となっていますね。

そこで上記設定が有効となるようにuser poolを再度作成してみます。

create-user-poolコマンドでハイライト部分のオプションを指定してuser poolを作成します。これによりサインアップ時にVerifyメッセージがEメールで送信されるようになります。

# user pool作成
$ USER_POOL_NAME=test-pool-2
$ aws cognito-idp create-user-pool \
  --pool-name ${USER_POOL_NAME} \
  --alias-attributes "email" \
  --schema Name=email,Required=true \
  --verification-message-template DefaultEmailOption=CONFIRM_WITH_LINK \
  --auto-verified-attributes "email"

コンソールからuser poolのサインアップエクスペリエンスの設定を見ると、今度はEメールによるVerifyメッセージの送信が有効になっています。

user pool domainとuser pool clientについては冒頭と同様に作成してOKです。

Hosted UIのサインアップURLにアクセスします。必要な情報を入力し、[Sign up]をクリック。

すると今度はエラーメッセージではなく、Verifyメールを送信した旨のメッセージが表示されました。

受信したメールのリンクをクリック。

Your registration has been confirmed!と表示されたページが開き、アカウントのVerifyが無事できたようです。

Verifyしたアカウントでサインインしてみます。

サインインに成功し、コールバックURLにリダイレクトされました!

セルフサービスサインアップを無効化したい場合

Hosted UIからユーザー自身によるサインアップをさせないのであれば、--admin-create-user-config AllowAdminCreateUserOnly=trueを指定して「セルフサービスサインアップ」を無効化しましょう。この場合はVerifyメッセージの送信が無効化は不要です。

$ aws cognito-idp create-user-pool \
  --pool-name ${USER_POOL_NAME} \
  --alias-attributes "email" \
  --schema Name=email,Required=true \
  --admin-create-user-config AllowAdminCreateUserOnly=true

これによりHosted UIのログイン画面(https://${COGNITO_DOMAIN_NAME}.auth.${REGION}.amazoncognito.com/login?~)にアクセスするとサインアップ画面への遷移リンクが表示されなくなります。

またサインアップ画面(https://${COGNITO_DOMAIN_NAME}.auth.${REGION}.amazoncognito.com/signup?~)に直接アクセスすると、Signup is not allowed.と表示されサインアップは出来なくなっています。

おわりに

Amazon Cognito user poolのユーザーサインアップでAn error was encountered with the requested page.となる際の対処についてでした。

ハマりやすそうなポイントですが、ネット上にあまり情報が無かったので解決するのに苦労しました。

参考

以上