Google OAuthクライアントの作成
Google OAuthクライアントの作成
- 下記にアクセスし、Google Cloud Platformにログインする。
- ナビゲーション メニューから、APIとサービスを開く。
- 上部のプロジェクトを作成リンクをクリックする。
- 下記を設定し、作成ボタンをクリックする。
- プロジェクト名:
recsys-full
- 組織: 【自分の組織】
- 場所: 【自分の場所】
- プロジェクト名:
- 下記を設定し、作成ボタンをクリックする。
- 上部のプロジェクト名をクリックし、リソースを選択画面を開く。
recsys-full
を選択する。
- 上部のプロジェクトを作成リンクをクリックする。
- ナビゲーション メニューから、APIとサービス > OAuth 同意画面を開く。
- 開始ボタンをクリックする。
- 下記を設定し、作成ボタンをクリックする。
- アプリ情報 > アプリ名:
recsys-full
- アプリ情報 > ユーザー サポートメール: 【自分のメールアドレス】
- 対象:
外部
- 連絡先情報: 【自分のメールアドレス】
- 終了 > Google API サービス: ユーザーデータに関するポリシー に同意します。:
チェック
- アプリ情報 > アプリ名:
- 下記を設定し、作成ボタンをクリックする。
- 左メニューからクライアントを開く。
- クライアントを作成リンクをクリックする。
- 下記を設定し、作成ボタンをクリックする。
- アプリケーションの種類:
ウェブ アプリケーション
- 名前:
recsys-full
- 承認済みのJavaScript生成元 > URI 1:
http://localhost:3000
- 承認済みのリダイレクトURI > URI 1:
http://localhost:3000/api/auth/callback/google
- http://localhost:3000/api/auth/providersにアクセスした際、
"callbackUrl"
として取得されるURL
- http://localhost:3000/api/auth/providersにアクセスした際、
- アプリケーションの種類:
- OAuthクライアントが作成された後、下記をメモし、OKボタンをクリックする。
- クライアント ID: 【クライアントID】
- クライアント シークレット: 【クライアントシークレット】
- クライアント シークレットは再表示できないので注意
- 開始ボタンをクリックする。
環境変数
取得した【クライアント ID】と【クライアントシークレット】を下記に貼り付けてください。
frontend/.env.local
AUTH_SECRET=【ランダム文字列】
AUTH_GOOGLE_ID=【クライアントID】 # <- 追加
AUTH_GOOGLE_SECRET=【クライアントシークレット】 # <- 追加
プロバイダのセットアップ
frontend/src/auth.ts
import NextAuth from 'next-auth';
import Google from 'next-auth/providers/google'; // <- 追加
export const { handlers, signIn, signOut, auth } = NextAuth({
providers: [Google], // <- Googleを追加
});
frontend/src/app/components/Header.tsx
...(略)...
const Header = () => {
return (
...(略)...
<nav className="flex items-center justify-between text-sm font-medium">
<div className="p-2">
<Link href="/about/">About</Link>
</div>
<div className="p-2">
<ButtonSignIn provider="Google" /> {/* <- Googleを追加 */}
</div>
<AccountMenu />
</nav>
...(略)...
);
};
export default Header;
ブラウザで下記URLにアクセスし、ヘッダからSign Inをクリックすると、Sign in with Googleボタンが表示されます。任意のアカウントを選択し、サインインしてください。サインアウトするときは、右上のアカウントメニューから、Sign Outをクリックしてください。ただし、現時点では、認証状態は判定できていません。