【NextJS】Cognito with Amplify(Gen2)+SSO(Google)

1. 概要

前回はAWS Amplify(Gen2)を使い、認証(Cognito)を行うのとTodoアプリを実装する内容でした。今回は前回のものにGoogle Signinを追加する内容となります。

対象としては開発を1年程やってて自分で最初から開発してみたい方になります。そのため細かい用語などの説明はしません。

2. 前提条件

2-1. こちらを完了してる事

3. 外部IDプロバイダーを設定(Google)

3-1. Cognitoドメインを取得

  • AWS Console 管理画面
    • Amazon Cognito
      • ユーザープール
        • 「アプリケーションの統合」タブ
          • ドメイン

3-2. 許可リダイレクトURIを設定

https://<Cognitoドメイン>/oauth2/idpresponse

4. Amplifyのシークレット作成(sandbox)

4-1. こちらを参考

npx ampx sandbox secret set GOOGLE_CLIENT_ID
npx ampx sandbox secret set GOOGLE_CLIENT_SECRET
npx ampx sandbox secret list

5. ソースコード

5-1-1. amplify/auth/resource.ts

import { defineAuth, secret } from "@aws-amplify/backend";

/**
 * Define and configure your auth resource
 * @see https://docs.amplify.aws/gen2/build-a-backend/auth
 */
export const auth = defineAuth({
  loginWith: {
    email: true,
    externalProviders: {
      google: {
        clientId: secret("GOOGLE_CLIENT_ID"),
        clientSecret: secret("GOOGLE_CLIENT_SECRET"),
        scopes: ["email"],
      },
      callbackUrls: [
        "http://localhost:3000/",
        "https://main.12345678901234.amplifyapp.com/",
      ],
      logoutUrls: [
        "http://localhost:3000/",
        "https://main.12345678901234.amplifyapp.com/",
      ],
    },
  },
});
  • 「externalProviders」を追加

6. Amplifyのcloud sandboxを立ち上げ

npx ampx sandbox

7. サーバーを起動

npm run dev

8. ブラウザで確認(ローカル)

  • http://localhost:3000
    • 「Sign in with Google」が表示されてる

9. Amplifyのシークレット作成(管理画面)

9-1. 該当プロジェクト

  • ホスティング
    • シークレット
      • GOOGLE_CLIENT_ID
      • GOOGLE_CLIENT_SECRET

10. ローカルからAmplifyへデプロイ

git add .
git commit -am "Added sso of google"
git push

11. ブラウザで確認(Amplifyのデプロイドメイン)

  • https://main.12345678901234.amplifyapp.com/
    • 画面キャッチャーは上記の8を参照

12. 備考

今回はGoogle Signinを追加する内容についてでした。

13. 参考

投稿者プロフィール

Sondon
開発好きなシステムエンジニアです。
卓球にハマってます。

関連記事

  1. 【NextJS】Error Handling

  2. 【NextJS】Firestore

  3. 【NextJS】Upload and Render Images wi…

  4. 【NextJS】TextField

  5. 【NextJS】Metadata(Head,Title)・Script…

  6. 【NextJS】Button・IconButton・LoadingBu…

最近の記事

制作実績一覧

  1. Checkeys