モバイルアプリの認証設定は複雑になることがありますが、SupabaseとCapacitorのSocial Loginプラグインを組み合わせることで サプバース と Capgo Social Login plugin makes it straightforward. This tutorial will guide you through integrating social authentication (Google, Apple, Facebook) with Supabase in your Capacitor app.
ソーシャルログインとSupabaseを使用する理由
Supabase ソーシャルログイン @capgo/capacitor-social-login Capacitorソーシャルログイン @capgo/capacitor-supabase Capacitor
- ソーシャルログイン
- Capacitor
- Capacitor
- ソーシャルログイン
- Built-in user management
Prerequisites
開始する前に、以下を確認してください。
- A Capacitor プロジェクトを設定
- Supabaseアカウントとプロジェクト
- 選択したソーシャルプロバイダーの開発者アカウント (Google、Apple、Facebook)
ステップ 1: ソーシャルログインプラグインのインストールと設定
まず、Capgo ソーシャルログインプラグインをインストールしてください:
npm install @capgo/capacitor-social-login
npx cap sync
See the ソーシャルログイン と Supabase プラットフォームごとの設定用のプラグインページ。
ステップ 2: Supabase プロジェクトの設定
Supabase プロジェクトを作成して設定する
-
Supabase プロジェクトを作成する:
- 以下のサイトにアクセスしてください。 supabase.com サインアップ/サインインしてください。
- 「新しいプロジェクト」をクリックしてください。 組織を選択してください。
- プロジェクト名を入力してください。
- Step 1: Install Capacitor CLI Step 3: Create a new Capacitor project (例:「MyApp Auth」)
- セットする データベースパスワード (安全に保存してください)
- 選択する リージョン (ユーザーに近いものを選択してください)
- クリック 「新しいプロジェクトを作成」
-
プロジェクトのクレデンシャルを取得:
- 作成されたら、 設定 > API
- プロジェクトURLをコピーしてください プロジェクトURL (例えば、
https://your-project-ref.supabase.co) - プロジェクトURLをコピーしてください 匿名パブリック APIキー
- これらの情報は後でアプリで使用するために保存してください
認証設定を構成する
-
一般的な認証設定を設定する:
- 以下の手順に従ってください 認証>設定
- 以下 基本設定:
- 設定 サイトURL あなたのアプリのURL (例えば、
https://yourdomain.comまたはhttp://localhost:3000サイトURL - に設定してください。 開発用に 追加の
http://localhost:3000 https://yourdomain.com capacitor://localhost (for mobile apps)
- 設定 サイトURL あなたのアプリのURL (例えば、
-
リダイレクトURL 必要であれば
- メール設定を構成する SMTP設定, メールプロバイダを設定する
- メール確認とパスワードリセットを有効にする
- 開発環境では、組み込みメールサービスを使用できます
社会的認証プロバイダを有効にする
- プロバイダのセクションにアクセスする:
- Capgoのドキュメント SupabaseのダッシュボードのAuthentication > Providersに移動する 利用可能な社会的プロバイダの一覧が表示される
- 各プロバイダには
- 有効 をタップする 切り替えと設定オプション
さて、各ソーシャル プロバイダーを詳しく設定しましょう:
ステップ 3: Supabase でソーシャル プロバイダーを設定する
Supabase で Google 認証を設定する
まず、Google OAuth のクレデンシャルを取得しましょう:
Google の設定ガイドを徹底的に参照してください: Google 認証の設定
このガイドでは、以下の内容をカバーしています:
- Google Cloud プロジェクトを作成する
- iOS、Android、Web 向けの OAuth 2.0 クレデンシャルを設定する
- consent スクリーンを設定する
- 必要な Client ID とシークレットを取得する
Google設定を完了した後、CapacitorでSupabaseを設定します:
- SupabaseでGoogleプロバイダーを有効にします:
- Supabaseダッシュボードで 認証 > プロバイダー
- 以下の項目を検索します Google を ONに切り替えます
- 設定値を入力します
- クライアントID: Google OAuth Web 設定値 クライアントID(Google Cloud Consoleから)
- クライアントシークレット: Google OAuth Web クライアントシークレット
- リダイレクトURL:
https://your-project-ref.supabase.co/auth/v1/callback(自動入力)
- Click 「保存」
重要:Capgoで使用する Web クライアントID かつ __CAPGO_KEEP_0__ Web クライアントシークレット
Supabase では、モバイル アプリを構築している場合でも、Web クライアント ID を使用できます。モバイル クライアント ID は、プラグインの構成で別々に使用されます。
Apple 認証の設定
Apple 認証の設定のための資格情報を取得する 詳細な Apple 設定ガイドをご覧ください:
Apple 認証の設定
- このガイドでは、以下の内容をカバーします。
- Apple Developer アカウントの設定
- App ID と Service ID の作成
- Sign in with Apple の機能の設定
- iOS、Android、Web向けのプラットフォーム固有の設定
Appleの設定を完了した後、Supabaseで設定する
- SupabaseでAppleプロバイダーを有効にする:
- Go to 認証 > プロバイダー Appleを ONに切り替える 設定値を入力する
- クライアントID
- : サービスID識別子 (例えばクライアントシークレット
com.yourapp.signin) - __CAPGO_KEEP_0__: Apple 秘密鍵を使用してこの JWT を生成します (Apple ドキュメントの "JWT の形式" を参照) Supabase の Apple ドキュメント Facebook 認証
- リダイレクト URL:
https://your-project-ref.supabase.co/auth/v1/callback自動入力
- : サービスID識別子 (例えばクライアントシークレット
- クリック “Save”
「保存」をクリック注意
: Apple 認証設定は、サービス ID、秘密鍵、JWT の生成に伴う Apple の要件により最も複雑です。各プラットフォームのドキュメントを慎重に確認してください。
Supabase の Facebook 認証の設定
Facebook の資格情報を取得する Facebook認証設定
This guide covers:
- Facebook開発者アカウントとアプリの作成
- Facebookログイン製品の追加
- OAuthリダイレクトURIの設定
- App ID、App Secret、Client Tokenの取得
- iOSとAndroid用のプラットフォーム固有の設定
Facebookの設定を完了した後、Supabaseで設定する:
- FacebookプロバイダをSupabaseで有効にする:
- Go to 認証 > プロバイダ とスイッチ Facebook ON
- 設定を入力してください
- Client ID: FacebookアプリIDを入力してください
- Client Secret: Facebookアプリシークレットを入力してください
- Redirect URL:
https://your-project-ref.supabase.co/auth/v1/callback(自動入力)
- Click “Save”
重要な注意事項: SupabaseのコールバックURLを追加してください (https://your-project-ref.supabase.co/auth/v1/callbackFacebookアプリの Valid OAuth Redirect URIs Facebook Loginの設定
重要なSupabaseの設定の注記
Row Level Security (RLS):
- 認証を設定した後、各テーブルでRLSを有効にします
- Database > Tables とtoggle Enable RLS 各テーブルで for
- 認証ユーザーに基づいてデータアクセスを制御するポリシーを作成
ユーザー管理:
- 認証ユーザーを表示する 認証 > ユーザー
- 認証イベントを監視する 認証 > ログ
- メールテンプレートを設定する 認証 > メールテンプレート
設定のテスト:
- Supabaseの組み込み認証テストツールを使用
- 以下に移動 認証 > ユーザー とクリック 「ユーザーを招待」 テスト用のメールフローを設定
- 確認する ログ セクションで認証エラーを確認
ステップ 4: ソーシャル ログイン プラグインを設定
ソーシャル ログイン プラグインを設定するには、対応するクレデンシャルとともに、Supabase を設定した後、必要です。 重要: プラグインは、OAuth クレデンシャルを取得する必要があります。 元のプロバイダー (Supabase ではなく)、サーバー側の認証を Supabase が管理する
認証フローのしくみ
設定に進む前に、流れを理解してください
- プラグインは プラグインは、Google/Apple/Facebookなどの社会的プロバイダーとネイティブに認証します
- プラグインは プロバイダーからトークンを受け取ります
- アクセストークン、IDトークン アプリはこれらのトークンを
signInWithIdToken() - スーパーベースに送信します スーパーベースは
- プロバイダーとトークンを検証し、ユーザーセッションを作成します スーパーベースは、
Google プラグイン設定
プラグインにはあなたの Web クライアント ID すべてのプラットフォームに、オプションでiOS用の iOS用の iOS固有の機能のために:
import { SocialLogin } from '@capgo/capacitor-social-login';
await SocialLogin.initialize({
google: {
// Use the same Web Client ID you configured in Supabase
webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com',
// Optional: iOS Client ID for iOS-specific features
iOSClientId: 'YOUR_IOS_CLIENT_ID.apps.googleusercontent.com',
// Optional: Request offline access for refresh tokens
mode: 'offline'
}
});
Googleの重要なポイント:
- Web クライアント ID (Android/iOSクライアントIDではありません)の フィールド
webClientIdWeb クライアント IDだけでもプラグインはすべてのプラットフォームで動作します - The plugin needs your
- The
iOSClientIdはiOS向けのGoogle機能のみに使用されます
Apple プラグイン構成
Appleの構成はiOSとAndroidで異なります
iOSの場合 (ネイティブのAppleサインイン):
await SocialLogin.initialize({
apple: {
// No additional configuration needed for iOS
// The plugin uses the native Apple Sign-In capability
}
});
Android/Webの場合 (Service IDが必要です):
await SocialLogin.initialize({
apple: {
clientId: 'YOUR_SERVICE_ID', // The Service ID from Apple Developer Portal
redirectUrl: 'https://your-project-ref.supabase.co/auth/v1/callback'
}
});
Appleの重要なポイント
- iOSはネイティブのSign in with Appleを使用します (追加の構成は必要ありません)
- Android/Webでは、Apple Developer Portalで作成したService IDが必要です
- The
redirectUrlApple Developer PortalとSupabaseで設定した内容と一致するようにしてください。
Facebookプラグイン設定
FacebookにはApp IDとClient Tokenが必要です:
await SocialLogin.initialize({
facebook: {
appId: 'YOUR_FACEBOOK_APP_ID', // From Facebook Developer Dashboard
clientToken: 'YOUR_FACEBOOK_CLIENT_TOKEN', // From Facebook Developer Dashboard
// Optional: Use Facebook Limited Login (for enhanced privacy)
limitedLogin: false // See our Facebook setup guide for important Limited Login details
}
});
Facebookの重要なポイント
- Supabaseで設定したApp IDを使用してください
- Client TokenはFacebookアプリの基本設定で見つけることができます
limitedLogin: trueFacebookのプライバシーに焦点を当てたLimited Login機能を有効にします (iOSのみ)- 重要: 以下のリンクを参照してください Facebookの設定ガイド 詳細なLimited Login情報、包括的にATTの考慮事項については
プラグインの初期化を完了してください
CapgoでSupabaseとCapacitorをセットアップする
import { SocialLogin } from '@capgo/capacitor-social-login';
export async function initializeSocialLogin() {
await SocialLogin.initialize({
google: {
webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com',
mode: 'offline'
},
facebook: {
appId: 'YOUR_FACEBOOK_APP_ID',
clientToken: 'YOUR_FACEBOOK_CLIENT_TOKEN',
},
apple: {
// iOS: no config needed
// Android/Web: uncomment the lines below
// clientId: 'YOUR_SERVICE_ID',
// redirectUrl: 'https://your-project-ref.supabase.co/auth/v1/callback'
}
});
}
重要な注意事項
- Capacitorを使用する場合、CapgoのAppflowとCapacitorを使用する場合の差異を理解することが重要です。
initialize()一度 アプリが起動したときに呼び出す - 各ログイン前に呼び出すのではなく
- 使用する予定のプロバイダーを設定する必要がある ここで記載されているクレデンシャルは、元のプロバイダーから取得したものであり、Supabaseから取得したものではありません。Supabaseに設定したプロバイダーと一致するようにしてください。
- ステップ 5: Supabase Clientのセットアップ
Supabase Clientをインストールしてください。
__CAPGO_KEEP_0__
npm install @supabase/supabase-js
Supabase サービスを作成する
// services/supabase.ts
import { createClient } from '@supabase/supabase-js';
const supabaseUrl = 'https://your-project-ref.supabase.co';
const supabaseKey = 'your-anon-public-key';
export const supabase = createClient(supabaseUrl, supabaseKey, {
auth: {
autoRefreshToken: true,
persistSession: true,
detectSessionInUrl: false,
},
});
ステップ 6: 認証フローを実装する
両方の認証サービスを組み合わせた認証サービスを作成する
// services/auth.ts
import { SocialLogin } from '@capgo/capacitor-social-login';
import { supabase } from './supabase';
export class AuthService {
async initializeSocialLogin() {
await SocialLogin.initialize({
google: {
webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com',
},
facebook: {
appId: 'YOUR_FACEBOOK_APP_ID',
clientToken: 'YOUR_FACEBOOK_CLIENT_TOKEN',
},
apple: {} // iOS configuration
});
}
async signInWithGoogle() {
try {
const result = await SocialLogin.login({
provider: 'google',
options: {
scopes: ['email', 'profile']
}
});
const googleResult = result.result;
if (!googleResult) {
throw new Error('Google login failed');
}
// GoogleLoginResponse is a union type - check responseType to determine flow
if (googleResult.responseType === 'online') {
// Online mode: use idToken directly with Supabase
const { data, error } = await supabase.auth.signInWithIdToken({
provider: 'google',
token: googleResult.idToken!,
});
if (error) throw error;
return data;
} else {
// Offline mode: exchange serverAuthCode on your backend
// Your backend should exchange the code for tokens and create a Supabase session
const response = await fetch('/api/auth/google', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ serverAuthCode: googleResult.serverAuthCode })
});
return response.json();
}
} catch (error) {
console.error('Google sign-in error:', error);
throw error;
}
}
async signInWithApple() {
try {
const result = await SocialLogin.login({
provider: 'apple',
options: {
scopes: ['email', 'name']
}
});
const { data, error } = await supabase.auth.signInWithIdToken({
provider: 'apple',
token: result.result?.identityToken!,
});
if (error) throw error;
return data;
} catch (error) {
console.error('Apple sign-in error:', error);
throw error;
}
}
async signInWithFacebook() {
try {
const result = await SocialLogin.login({
provider: 'facebook',
options: {
permissions: ['email', 'public_profile']
}
});
const fbResult = result.result;
if (!fbResult?.accessToken?.token) {
throw new Error('Facebook login failed - no access token received');
}
// Facebook uses accessToken for Supabase authentication
const { data, error } = await supabase.auth.signInWithIdToken({
provider: 'facebook',
token: fbResult.accessToken.token,
});
if (error) throw error;
return data;
} catch (error) {
console.error('Facebook sign-in error:', error);
throw error;
}
}
async signOut() {
// Sign out from Supabase
await supabase.auth.signOut();
// Optionally sign out from social providers
await SocialLogin.logout({
provider: 'google' // or 'apple', 'facebook'
});
}
getCurrentUser() {
return supabase.auth.getUser();
}
onAuthStateChange(callback: (event: string, session: any) => void) {
return supabase.auth.onAuthStateChange(callback);
}
}
export const authService = new AuthService();
ステップ 7: アプリに実装する
サービスを初期化し、認証を処理する
// main.ts or app component
import { authService } from './services/auth';
async function initializeApp() {
await authService.initializeSocialLogin();
// Listen to auth state changes
authService.onAuthStateChange((event, session) => {
if (event === 'SIGNED_IN') {
console.log('User signed in:', session.user);
// Redirect to authenticated area
} else if (event === 'SIGNED_OUT') {
console.log('User signed out');
// Redirect to login
}
});
}
initializeApp();
ログインボタンを作成する
// Login component
async function handleGoogleLogin() {
try {
const user = await authService.signInWithGoogle();
console.log('Signed in with Google:', user);
} catch (error) {
console.error('Login failed:', error);
}
}
async function handleAppleLogin() {
try {
const user = await authService.signInWithApple();
console.log('Signed in with Apple:', user);
} catch (error) {
console.error('Login failed:', error);
}
}
async function handleFacebookLogin() {
try {
const user = await authService.signInWithFacebook();
console.log('Signed in with Facebook:', user);
} catch (error) {
console.error('Login failed:', error);
}
}
async function handleLogout() {
try {
await authService.signOut();
console.log('Signed out successfully');
} catch (error) {
console.error('Logout failed:', error);
}
}
ステップ 8: プラットフォーム固有の設定
iOS 設定
詳細な iOS セットアップ手順については、プラットフォーム固有のガイドを参照してください
- Google iOS セットアップ - URL スキーム、Info.plist 設定
- Apple iOS セットアップ - Appleサインイン機能の設定
- Facebook iOSの設定 (一般的なFacebookガイド) - FacebookSDKの設定
クイックサマリー - への追加 ios/App/App/Info.plist:
<!-- Google Sign-In URL scheme -->
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>YOUR_REVERSED_CLIENT_ID</string>
</array>
</dict>
</array>
<!-- Apple Sign-In capability -->
<key>com.apple.developer.applesignin</key>
<array>
<string>Default</string>
</array>
iOSの設定の詳細な手順については、Xcodeプロジェクトの設定を含む、完全なガイドを参照してください。
Androidの設定
詳細なAndroidの設定については、プラットフォーム固有のガイドを参照してください。
- Google Androidの設定 - SHA-1の指紋、Google Play Servicesの設定
- Apple Androidの設定 - Android用サービスIDの設定
- Facebook Androidのセットアップ (一般的なFacebookガイド) - Facebook SDK統合
Androidの基本設定:
1. SHA-1の指紋を取得 (Googleの場合):
# For debug builds (development)
cd android
./gradlew signingReport
# Look for the SHA1 fingerprint under "Variant: debug"
# Add this SHA1 to your Google Cloud Console Android OAuth client
2. AndroidManifest.xmlを設定 - 追加 android/app/src/main/AndroidManifest.xml:
<!-- Internet permission -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Facebook configuration -->
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id"/>
<meta-data
android:name="com.facebook.sdk.ClientToken"
android:value="@string/facebook_client_token"/>
3. Facebookのリソースを追加 に android/app/src/main/res/values/strings.xml:
<string name="facebook_app_id">YOUR_FACEBOOK_APP_ID</string>
<string name="facebook_client_token">YOUR_FACEBOOK_CLIENT_TOKEN</string>
Google Play Servicesのセットアップやパッケージ名の設定など、Androidの完全な設定については、関連するプラットフォームガイドを参照してください。
Step 9: Supabaseデータベースの使用(認証済みユーザー)
ユーザーが認証されたら、Supabaseのデータベースを使用できます。Row Level Security(RLS)を使用します。
// Example: Fetch user profile
async function getUserProfile() {
const { data: user } = await supabase.auth.getUser();
if (user) {
const { data, error } = await supabase
.from('profiles')
.select('*')
.eq('id', user.user.id)
.single();
return data;
}
}
// Example: Update user profile
async function updateUserProfile(updates: any) {
const { data: user } = await supabase.auth.getUser();
if (user) {
const { data, error } = await supabase
.from('profiles')
.update(updates)
.eq('id', user.user.id);
return data;
}
}
重要なセキュリティ上の考慮事項
- 機密鍵を暴露しない クライアント code
- 環境変数を使用して設定 設定
- Row Level Securityを有効にする Supabase
- トークンを検証 必要に応じてバックエンドで
- トークンを更新する 自動的に Supabase と連携します。
一般的な問題のトラブルシューティング
トークン一致エラー
- ソーシャルログインプラグインと Supabase の OAuth プロバイダーの設定が一致していることを確認してください
- リダイレクト URL が正しく設定されていることを確認してください
プラットフォーム固有の問題
- iOS: Apple Developer の設定と bundle ID が一致していることを確認してください
- Android: Google Console に SHA1 の指紋が正しく追加されていることを確認してください
認証フローの中断
- ネットワーク問題のための適切なエラーハンドリングを実装してください
- 認証中にローディング状態を追加してください
まとめ
CapacitorとSupabaseを組み合わせた社会認証システムを構築しました。これにより、以下の機能が提供されます。
- セキュアな社会認証
- トークン管理のシームレス
- リアルタイムデータベース統合
- クロスプラットフォーム互換性
The combination of Supabase and the Capgo Social Login plugin offers a powerful, scalable authentication solution for your Capacitor apps.
より高度な機能 マルチファクター認証 または 、__CAPGO_KEEP_1__アプリケーションに高度な機能 カスタムクレーム と Social Login プラグイン ドキュメント.
Keep going from Setup Supabase Authentication with Capacitor Social Login Plugin
Capacitor と Capgo の Social Login プラグインを使用して Supabase の設定を続行してください。 Setup Supabase Authentication with Capacitor Social Login Plugin Capacitor と Capgo の Social Login プラグインを使用して Supabase の設定を続行してください。 @capgo/capacitor-social-login for the implementation detail in @capgo/capacitor-social-login, @capgo/capacitor-passkey for the implementation detail in @capgo/capacitor-passkey, @capgo/capacitor-native-biometric for the implementation detail in @capgo/capacitor-native-biometric, 2要素認証 2要素認証の実装詳細について SSO (エンタープライズ) SSO (エンタープライズ)の実装詳細について。