はじめに
こんにちは!かほです♪🐥
現在、本業では技術広報業務やエンジニア業務などに従事しています。
今回の記事では、Supabase×Next.jsを用いたアプリ開発におけるGoogle認証機能の実装方法について説明します。
ここで言う認証機能は下記の2点です。
- サインアップ&ログイン
- ログアウト
Supabase×Next.js×Vercelの連携方法から知りたい方は、下記の記事を参考にしてください。
Supabase×Next.jsで、Google認証機能を実装したい方々の一助になれば幸いです🙌
この記事の読者対象
・Supabaseの認証周りについて知りたい方
・Supabase×Next.jsで認証機能を含むアプリを作ってみたい方
・Supabase×Next.jsでGoogleによる認証方法を知りたい方
・GCP(Google Cloud Platform)について知りたい方
・Supabaseを今後使ってみたい方
・Next.jsを使って高速でアプリを作りたい方
開発環境
"dependencies": {
"@supabase/auth-ui-react": "^0.2.7",
"@supabase/supabase-js": "^2.2.1",
"eslint": "8.28.0",
"eslint-config-next": "13.0.6",
"next": "13.0.6",
"react": "18.2.0",
"react-dom": "18.2.0",
},
"devDependencies": {
"@types/node": "^18.11.13",
"@types/react": "18.0.26",
}
ユーザーの認証方法について
Supabaseのユーザー認証の方法には、4通りあります。今回使用する方法は、ソーシャルプロバイダー(Google)による認証です。下記のSupabase公式ドキュメントにGoogle認証についての流れが書いてあるため、ご興味のある方は、ご参照ください🙌
また下記のSupabase公式ドキュメントに、その他認証方法についても詳しく書いてあるため、ご興味のある方は、ご参照ください🙌
GCPでプロジェクトを作成しよう
Google認証を行うにあたりGoogle OAuthアプリケーションの設定を行い、アプリケーションの資格情報をSupabaseのダッシュボードに追加する必要があります。そのため、最初にGoogleがクラウド上で提供するサービス群 GCP(Google Cloud Platform) で、Googleプロジェクトの作成を行います。
-
Google Cloud Platformにアクセスを行い、Googleアカウントのサインインを行います。
-
右上の
コンソール
を押したのち、画面遷移先左上のプロジェクトの選択
を押します。すると、下記のようなプロジェクトの選択という題名のポップアップが出てきます。右上の新しいプロジェクト
を押しましょう。
. -
新しいプロジェクトの設定画面が出てくるため、
プロジェクト名
と場所
を設定し、作成
ボタンを押します。数秒後に新しいプロジェクトのダッシュボードが作成されます。
.
Google OAuthキーをSupabaseプロジェクトに追加しよう
新しいGoogleプロジェクトの作成を行いました。次に、SupabaseプロジェクトのAuthentication
>Providers
>Google
(下記画像参照)のClient ID
とClient Secret
に設定するGoogle OAuthキーを作成します。
.
OAuth同意画面の設定しよう
アプリ登録の編集をしよう
Google資格情報を作成しよう
-
OAuthクライアントIDの作成
画面が表示されます。アプリケーションの種類
をウェブアプリケーション
と選択し、名前は適当に記載します。
. -
次にSupabaseプロジェクトの
Authentication
>Providers
>Google
のRedirect URL
をコピーします。
. -
コピーした
Redirect URL
を承認済みのリダイレクトURL
に追加します。ここまでの記載が終わったら、作成
ボタンを押します。
. -
OAuthクライアントを作成しました
のポップアップ画面が表示されます。クライアントID
とクライアントシークレット
をコピーします。
.
Google OAuthキーをSupabaseプロジェクトに設定しよう
-
Supabaseプロジェクトの
Authentication
>Providers
>Google
のGoogle enabled
をオンにし、上記でコピーしたクライアントID
とクライアントシークレット
を個々の場所にペーストします。Save
ボタンを押します。
フロントエンド側にコードを追加しよう
上記までの過程でGoogle認証の使用を可能にしたため、Google認証に伴うコードの追加を行います。
今回のGoogle認証機能では、auth-ui-react
というライブラリを用いて行います。
下記の公式ドキュメントにも記載されていますので、ご参照ください🙌
下記がgoogle.tsxの全体像です。
import Head from "next/head";
import styles from "../styles/Home.module.css";
import { createClient } from '@supabase/supabase-js'
import { Auth, ThemeSupa } from '@supabase/auth-ui-react'
export default function Google(){
const supabase = createClient('Project URL', 'Project API anon key')
return (
<>
<div className={styles.container}>
<Head>
<title>Google認証画面</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<main className={styles.main}>
<div className={styles.grid}>
<Auth
supabaseClient={supabase}
appearance={{ theme: ThemeSupa }}
providers={['google']}
/>
</div>
</main>
<footer className={styles.footer}>
</footer>
</div>
</>
)
}
Google認証機能の実装方法について、コードを上から順に説明します。
auth-ui-react
というライブラリからAuth
コンポーネントと様式のテーマであるThemeSupa
をインポートします。@supabase/supabase-js
からcreateClient
をインポートします。
import { Auth, ThemeSupa } from '@supabase/auth-ui-react'
import { createClient } from '@supabase/supabase-js'
次にAuth
コンポーネントのpropsであるsupabaseClient
に入力するsupabaseを定義します。
createClientの引数に、SupabaseプロジェクトのProject Settings
>API
のProject URLとProject APIのanon keyを設定します。
const supabase = createClient('Project URL', 'Project API anon key')
最後にAuthコンポーネントの各propsに値を設定します。
supabaseClient
には、先ほど定義したsupabase
、appearance
には{ theme: ThemeSupa }
を設定します。今回、providersの値にはsocialプロバイダーとしてGoogleを使用したので、[google]
と設定しましょう。
<Auth
supabaseClient={supabase}
appearance={{ theme: ThemeSupa }}
providers={['google']}
/>
ログアウト機能について
ログアウト機能の実装方法については、下記の「話題のSupabaseでサクッと認証機能をつくってみた!」の「ログアウト機能を実装しよう」の段落と内容が同じですので、実装したい方はごぜひ参考にしてください🙌
最後に
これで実装はおしまいです!
今回は、Supabase×Next.jsを用いたアプリ開発におけるGoogle認証の実装方法について説明しました。今後は主にフロントエンド周辺、コミュニティ運営、Tech PR(技術広報)の記事を中心に書いていく予定ですので、気になる方はぜひフォローをよろしくお願いします♪ではでは〜🐥
Twitterアカウント:https://twitter.com/kaho_eng
参考資料