모바일 앱에서 인증을 설정하는 것은 복잡할 수 있지만 Supabase 와 Capgo Social Login 플러그인 makes it straightforward. This tutorial will guide you through integrating social authentication (Google, Apple, Facebook) with Supabase in your Capacitor app.
__CAPGO_KEEP_0__
앱에서 Supabase @capgo/capacitor-social-login __CAPGO_KEEP_0__
- 에서 소셜 인증 (Google, Apple, Facebook)과
- Supabase
- 다양한 플랫폼 호환성
- 실시간 데이터베이스 통합
- 내장된 사용자 관리
사전 요구 사항
시작하기 전에, 다음을 확인하세요:
- Capacitor 프로젝트를 설정했습니다.
- Supabase 계정 및 프로젝트
- 선택한 사회 공급자 (Google, Apple, Facebook) 의 개발자 계정
Step 1: Social Login 플러그인을 설치 및 구성
먼저 Capgo Social Login 플러그인을 설치하세요:
npm install @capgo/capacitor-social-login
npx cap sync
Step 2: Supabase 프로젝트 설정
Supabase 프로젝트를 생성 및 구성하세요
-
프로젝트를 만들기 위해 Supabase 프로젝트를 생성하세요:
- 로 이동하세요 supabase.com 회원가입/로그인하세요
- 클릭하세요 “새 프로젝트”
- 회사 선택
- 프로젝트 이름을 입력하세요 (예: “MyApp Auth”) 데이터베이스 비밀번호를 설정하세요
- 데이터베이스 비밀번호를 설정하세요 데이터베이스 비밀번호를 설정하세요 (이 보안을 안전하게 저장하세요)
- Select your 지역 (가장 가까운 사용자에게 가장 가까운 것을 선택하세요)
- Click “Create new project”
-
프로젝트 인증서를 받으세요:
- 프로젝트가 생성되면 설정 > API
- 프로젝트 URL을 복사하세요 (예를 들어, (e.g.,
https://your-project-ref.supabase.co) - __CAPGO_KEEP_0__ 키 복사하기 공개 키 API 키
- 앱에서 나중에 사용하기 위해 저장하세요
인증 설정
-
일반 인증 설정:
- 바로 가기 인증 > 설정
- 설정 일반 설정:
- 설정 사이트 URL To your app의 URL (예:
https://yourdomain.com또는http://localhost:3000개발을 위해 - 추가 Redirect URL 필요한 경우:
http://localhost:3000 https://yourdomain.com capacitor://localhost (for mobile apps)
- 설정 사이트 URL To your app의 URL (예:
-
이메일 설정 (선택적이지만 권장되는):
- 아래 SMTP 설정, 이메일 제공업체를 구성하여
- 이메일 확인 및 비밀번호 초기화가 가능합니다.
- 개발을 위해 내장된 이메일 서비스를 사용할 수 있습니다.
인증 제공자 사회 서비스를 활성화하세요.
- 제공자 섹션에 접근하세요.:
- Authentication > Providers로 이동하세요. Supabase 대시보드에서 사용 가능한 사회 제공자가 목록으로 나타납니다.
- 각 제공자는
- Enable 활성화 및 구성 옵션을 가지고 있습니다. 각 사회 제공자를 자세히 구성해 보겠습니다.
Step 3: Supabase에서 사회 제공자를 구성하세요.
Step 3: Supabase에서 사회 제공자를 구성하세요.
구글 인증을 Supabase에 설정하는 방법
먼저 Google OAuth 인증서를 받으세요:
구글 설정 가이드를 따라하세요: 구글 인증 설정
이 가이드는 다음과 같은 내용을 다룹니다:
- Google Cloud 프로젝트를 생성하는 방법
- 웹, iOS, Android를 위한 OAuth 2.0 인증서를 설정하는 방법
- consent 화면을 설정하는 방법
- 필요한 Client ID와 비밀번호를 받는 방법
구글 설정을 완료한 후 Supabase에서 설정하세요:
- Supabase에서 Google 제공자를 활성화하세요::
- Supabase 대시보드에서 '설정'을 클릭하세요: 인증 > 제공자
- 찾기 Google 그리고 toggle ON
- 구성 정보를 채우세요:
- Client ID : Google OAuth Web Client ID (Google Cloud Console에서)
- Client Secret : Google OAuth 웹 클라이언트 비밀번호
- 리다이렉트 URL:
https://your-project-ref.supabase.co/auth/v1/callback(자동 채우기)
- 클릭 “저장”
중요: 사용자 웹 클라이언트 ID 및 웹 클라이언트 비밀번호 Supabase 에서 사용하세요. 모바일 앱을 개발하는 경우에도.
Apple 인증을 위한 Supabase 설정
Apple 인증을 사용하려면 다음 단계를 따르세요.
Apple 인증을 설정하는 방법에 대한 자세한 설명은 이 문서에서 확인할 수 있습니다. Apple 인증 설정
이 문서에서는 다음 항목에 대해 설명합니다.
- Apple 개발자 계정 설정
- App ID 및 Service ID 생성
- Apple 인증을 사용하는 기능을 설정하는 방법
- Apple 인증을 사용하려면 필요한 개인 키를 생성해야 합니다.
- iOS, Android, 및 Web 플랫폼에 대한 Apple 인증 설정
Apple 인증을 설정한 후 Supabase에서 설정을 완료하세요.
- Supabase에서 Apple 인증 제공자를 활성화하세요.:
- Capgo로 이동 인증 > 제공자 그리고 토글 애플 켜기
- 구성 정보를 입력하세요:
- 클라이언트 ID: 서비스 ID 식별자 (예:
com.yourapp.signin) - 클라이언트 시크릿: 애플 프라이빗 키를 사용하여 JWT를 생성하세요 (see Supabase Apple 문서 에 JWT 형식에 대한 자세한 내용을 참조하세요
- 리다이렉트 URL:
https://your-project-ref.supabase.co/auth/v1/callback(자동으로 입력됨)
- 클라이언트 ID: 서비스 ID 식별자 (예:
- 클릭 “저장”
주의: Apple 인증은 서비스 ID, 개인 키 및 JWT 생성을 위한 Apple의 요구 사항으로 인해 가장 복잡합니다. 각 플랫폼에 대한 문서를 신중히 따르세요.
Supabase에서 Facebook 인증 설정하기
Facebook 인증을 위한 자격 증명 획득:
다음과 같이 Facebook 인증 설정을 완전히 설정하세요: Facebook 인증 설정
이 안내서에는 다음 항목이 포함됩니다.
- Facebook 개발자 계정 및 앱 만들기
- __CAPGO_KEEP_0__ 제품을 Facebook 로그인으로 추가합니다.
- __CAPGO_KEEP_0__에서 OAuth 리다이렉션 URI를 구성합니다.
- __CAPGO_KEEP_0__에서 앱 ID, 앱 시크릿, 클라이언트 토큰을 가져옵니다.
- iOS 및 Android를 위한 플랫폼별 구성
Facebook 설정을 완료한 후 Supabase에서 구성하십시오.
- Supabase에서 Facebook 제공자를 활성화하십시오.:
- __CAPGO_KEEP_0__으로 이동하십시오. 인증 > 제공자 Facebook 제공자를 활성화/비활성화하십시오. Facebook ON을 클릭하십시오. 구성 정보를 입력하십시오.
- __CAPGO_KEEP_0__
- 클라이언트 ID: Facebook 앱 ID
- 클라이언트 시크릿: Facebook 앱 시크릿
- 리다이렉트 URL:
https://your-project-ref.supabase.co/auth/v1/callback(자동 채우기)
- 클릭 “저장”
중요: Facebook 앱에 Supabase callback URL (https://your-project-ref.supabase.co/auth/v1/callback)을 추가하십시오. : Facebook 앱의 Valid OAuth Redirect URIs에 __CAPGO_KEEP_0__
Facebook 로그인 설정에서 중요합니다.
Row Level Security (RLS):
- 인증 후 테이블에 RLS를 활성화하세요.
- __CAPGO_KEEP_1__ > __CAPGO_KEEP_2__ __CAPGO_KEEP_3__ __CAPGO_KEEP_4__ __CAPGO_KEEP_5__ __CAPGO_KEEP_6__
- __CAPGO_KEEP_7__
__CAPGO_KEEP_8__
- __CAPGO_KEEP_9__ 인증 > 사용자
- 인증 이벤트를 모니터링하세요. 인증 > 로그
- 이메일 템플릿을 설정하세요. 인증 > 이메일 템플릿
설정 테스트:
- Supabase의 내장 인증 테스트 도구를 사용하세요.
- 로 인증 > 사용자 에서 ‘사용자 초대’ 을 클릭하여 이메일 흐름을 테스트하세요.
- 인증 오류를 확인하려면 로그 섹션을 확인하세요 로그 원본 제공자( Supabase가 아닌)에서 OAuth 인증서를 제공해야 합니다.
Step 4: Social Login 플러그인을 구성하십시오
Supabase가 구성되면 Social Login 플러그인을 구성해야 합니다. 중요: 플러그인은 OAuth 인증서를 원본 제공자( Supabase가 아닌)에서 제공해야 하며, Supabase는 서버 측 인증을 처리합니다. 인증 흐름 구성하기 전에 흐름을 이해하십시오:
플러그인은
플러그인은
- 플러그인은 소셜 제공자 (Google/Apple/Facebook)와 natively
- 플러그인은 토큰을 받습니다 (액세스 토큰, ID 토큰) 제공자로부터
- 앱은 이러한 토큰을 Supabase에 전송합니다
signInWithIdToken() - Supabase는 제공자와 토큰을 검증하고 사용자 세션을 생성합니다
- Supabase는 앱의 인증된 요청에 대한
자체 JWT 토큰을 반환합니다
Google 플러그인 구성 플러그인은 다음을 필요로합니다: Web Client ID 모든 플랫폼에 대해 옵션적으로 iOS Client ID 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 Client ID (Android/iOS Client ID가 아닌) 필드
webClientIdWeb Client ID만으로도 모든 플랫폼에서 플러그인을 사용할 수 있습니다. - The
- iOS 전용 Google 기능에만 사용되는 옵션입니다.
iOSClientIdApple 플러그인 구성 설정
iOS 전용 Google 기능에만 사용됩니다.
iOS와 Android의 Apple 설정이 다릅니다.:
iOS (네이티브 애플 로그인):
await SocialLogin.initialize({
apple: {
// No additional configuration needed for iOS
// The plugin uses the native Apple Sign-In capability
}
});
Android/Web (서비스 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'
}
});
애플의 주요 점:
- iOS는 네이티브 Sign in with Apple (추가 설정이 필요하지 않습니다)를 사용합니다.
- Android/Web는 애플 개발자 포털에서 생성한 서비스 ID가 필요합니다.
- The
redirectUrl이것은 Apple 개발자 포털과 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 App의 기본 설정에서 찾을 수 있습니다
limitedLogin: trueiOS에서만 Facebook의 개인 정보 보호에 초점을 맞춘 Limited Login 기능을 활성화합니다- 중요자세한 Limited Login 정보, ATT 고려 사항을 포함하여 설명서를 참조하세요 Facebook 설정
모든 제공자 초기화를 완료하세요
이것은 모든 제공자를 함께 초기화하는 방법입니다
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'
}
});
}
중요한 주의 사항:
- 호출
initialize()__CAPGO_KEEP_0__ __CAPGO_KEEP_1__ - __CAPGO_KEEP_2__
- __CAPGO_KEEP_3__ __CAPGO_KEEP_4____CAPGO_KEEP_5__
- __CAPGO_KEEP_6__
__CAPGO_KEEP_7__
__CAPGO_KEEP_8__
npm install @supabase/supabase-js
__CAPGO_KEEP_9__
// 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,
},
});
__CAPGO_KEEP_10__
__CAPGO_KEEP_11__
// 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();
Step 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();
로그인 버튼을 UI에 생성하십시오:
// 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);
}
}
Step 8: 플랫폼별 설정
iOS 설정
iOS 세부 설정 지침을 보려면 플랫폼별 지침을 참조하십시오:
- Google iOS 설정 - URL 스키마, Info.plist 설정
- Apple iOS 설정 - Sign in with Apple 기능 설정
- Facebook iOS 설정 (일반적인 Facebook 지침) - Facebook SDK 설정
빠른 요약 - 추가 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>
Android 구성에 대한 자세한 지침은 Google Play Services 설정 및 패키지 이름 구성과 같은 링크된 플랫폼 지침을 따르십시오.
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;
}
}
중요한 보안 고려 사항
- sensitive 키를 __CAPGO_KEEP_0__에 노출하지 마세요 클라이언트 code에서 환경 변수를 사용하세요
- 설정에 사용하세요 Supabase에서 Row Level Security를 활성화하세요
- backend에서 토큰을 검증하세요 토큰 갱신을 Supabase에서 자동으로 처리하세요
- 일반적인 문제 해결 토큰 일치 오류 해결
- Token Mismatch Errors Token Mismatch Errors
Token Mismatch Errors
Token Mismatch Errors
- OAuth 제공자 구성이 사회 로그인 플러그인과 Supabase 간에 일치하는지 확인하세요.
- 리다이렉트 URL이 올바르게 구성되어 있는지 확인하세요.
플랫폼별 문제
- iOS: Apple Developer 구성과 일치하는 Bundle ID를 확인하세요.
- Android: Google Console에 올바르게 SHA1 지문을 추가했는지 확인하세요.
인증 흐름 중단
- 네트워크 문제에 대한 적절한 오류 처리를 구현하세요.
- 인증 중 로딩 상태를 추가하세요.
결론
Supabase의 강력한 백엔드와 네이티브 사회 로그인 기능을 결합한 완전한 인증 시스템을 구축했습니다. 이 설정은 다음을 제공합니다.
- 보안적인 네이티브 사회 인증
- 무결점의 토큰 관리
- 실시간 데이터베이스 통합
- 플랫폼 간 호환성
Supabase와 Capgo Social Login 플러그인을 결합하면 Capacitor 앱에 강력하고 확장 가능한 인증 솔루션을 제공합니다.
더 많은 고급 기능을 사용하려면 2단계 인증 또는 사용자 지정 클레임을 확인하세요. Supabase 문서 및 Social Login 플러그인 문서.
Setup Supabase Authentication with Capacitor Social Login Plugin에서 계속 진행하세요.
만약에 사용 중이라면 Capgo에서 Supabase 인증을 Capacitor 소셜 로그인 플러그인과 함께 설정합니다. __CAPGO_KEEP_0__ 소셜 로그인 플러그인을 인증과 계정 흐름을 계획하고 연결하는 데 사용합니다. capgo/capacitor-social-login capgo/capacitor-social-login의 구현 세부 정보를 참조하세요. capgo/capacitor-passkey capgo/capacitor-passkey의 구현 세부 정보를 참조하세요. capgo/capacitor-native-biometric capgo/capacitor-native-biometric의 구현 세부 정보를 참조하세요. 두 단계 인증 두 단계 인증의 구현 세부 정보를 참조하세요. SSO (기업) __CAPGO_KEEP_0__ (기업)에서 SSO 구현 세부 정보에 대해.