初めに
WebアプリにAmazon Cognitoを使ったログイン機能を実装した内容についてまとめました。
※あくまで個人的なやり方で行ったので正しいとは限りません。
追加手順
初めに手動で追加していく手順です。
Amazon Cognitoの画面から操作していきます。
ユーザープール作成
- 私が作成したWebアプリはシングルページアプリケーションなのでSPAを選択
- サインイン識別子はメールアドレスを選択
必須属性は選択しないで進みます。
- ユーザーがサインインに成功した後にリダイレクトされるURLを指定します。
↑画像のURLはlocalhostなのでローカル環境へのリダイレクトになっています。
- 作成を押すとユーザープールは完成です。
WebアプリとCognitoの連携
作成したユーザープールから簡単に連携ができるガイドが出ます。
表示されているコマンド実行やコード修正を行なってください。
コード内で連携するユーザープールのユーザープールID、ドメイン、クライアントIDを貼り付ける場所があるので貼り付けてください。
これで連携が完了しました。
Webブラウザを実行するとログインページが表示されました。
↓ここからはAWS CloudFormationを使った自動作成です。
自動生成
WebアプリのIaCにCognitoの設定情報を記述していきます。
########################################## # Cognito User Pool ########################################## MyCognitoUserPool: Type: AWS::Cognito::UserPool Properties: UserPoolName: MyUserPool AutoVerifiedAttributes: - email UsernameAttributes: - email Policies: PasswordPolicy: MinimumLength: 8 RequireUppercase: true RequireLowercase: true RequireNumbers: true RequireSymbols: false ########################################## # Cognito User Pool Client (SPA) ########################################## MyCognitoUserPoolClient: Type: AWS::Cognito::UserPoolClient Properties: ClientName: MyUserPoolClient UserPoolId: !Ref MyCognitoUserPool GenerateSecret: false ExplicitAuthFlows: - ALLOW_USER_PASSWORD_AUTH - ALLOW_REFRESH_TOKEN_AUTH PreventUserExistenceErrors: ENABLED CallbackURLs: - "Amplifyのドメイン" LogoutURLs: - "Amplifyのドメイン" AllowedOAuthFlows: - implicit - code AllowedOAuthScopes: - email - openid - profile # 標準的なスコープとして追加 AllowedOAuthFlowsUserPoolClient: true SupportedIdentityProviders: - COGNITO ########################################## # Cognito User Pool Domain ########################################## MyCognitoUserPoolDomain: Type: AWS::Cognito::UserPoolDomain Properties: Domain: my-app-domain-example-12345 # グローバルでユニークな値に変更 UserPoolId: !Ref MyCognitoUserPool
コードを追記し、デプロイすると自動作成されます。
※コード内に記載しているURLはAmplifyのドメイン
デプロイ後の連携
自動で作成された後、作成されたユーザープールのユーザープールID、ドメイン、クライアントIDをコードに貼り付けないと連携されません。
以上が追加手順です。
⚠️追加中に発生したエラー
自動生成したCognitoと連携しても、うまくログイン画面が表示されないエラーが発生しました。
手動で作成したユーザプールと連携すると正常に動作していました。
エラー原因はIaCのCognito設定でした。
下の画像が手動で作成したユーザープールです。
自動で作成された方はログインページの表示がありません。
ログインページを有効にするための設定が不足していました。
↓このCognito独自のユーザープールを認証プロバイダーとして有効にするコードをIaCに追記すると解決できました。
SupportedIdentityProviders: - COGNITO
以上です。最後までお読みいただきありがとうございます。
参考になれば幸いです。