소셜 인증은 다단계 인증 흐름으로, 사용자를 계정에 로그인 처리하거나 기존 계정과 연결할 수 있게 해줍니다.
네이티브 플랫폼과 웹은 모두 사용자 인증 정보를 만든 후 signInWithCredential
또는 linkWithCredential
메서드에 전달할 수 있게 지원합니다. 웹 플랫폼에서는 팝업 또는 리디렉션을 통해 인증 프로세스를 트리거할 수 있습니다.
Firebase에서 Google 로그인을 사용할 때는 대부분의 구성이 이미 설정되어 있지만 머신의 SHA1 키를 Android에서 사용 가능하도록 구성할 필요가 있습니다. 인증 문서에서 키를 생성하는 방법을 확인할 수 있습니다.
Firebase Console에서 'Google' 로그인 제공업체가 사용 설정되어 있어야 합니다.
사용자가 이미 계정에 수동으로 등록된 후에 Google로 로그인하면 신뢰할 수 있는 제공업체의 Firebase 인증 개념으로 인해 인증 제공업체가 Google로 자동 변경됩니다. 자세한 내용은 여기에서 확인할 수 있습니다.
iOS+ 및 Android
네이티브 플랫폼에서 인증 흐름을 트리거하려면 서드 파티 라이브러리가 필요합니다.
공식 google_sign_in
플러그인을 설치합니다.
설치되면 로그인 흐름을 트리거하고 새 사용자 인증 정보를 만듭니다.
import 'package:google_sign_in/google_sign_in.dart';
Future<UserCredential> signInWithGoogle() async {
// Trigger the authentication flow
final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
// Obtain the auth details from the request
final GoogleSignInAuthentication? googleAuth = await googleUser?.authentication;
// Create a new credential
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth?.accessToken,
idToken: googleAuth?.idToken,
);
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithCredential(credential);
}
웹
웹에서 Firebase SDK는 Firebase 프로젝트를 사용하여 인증 흐름을 자동으로 처리할 수 있도록 지원합니다. 예를 들면 다음과 같습니다.
다음과 같이 사용자에게서 얻고자 하는 추가 권한 범위를 제공하는 Google 인증 제공업체를 만듭니다.
GoogleAuthProvider googleProvider = GoogleAuthProvider();
googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
'login_hint': 'user@example.com'
});
signInWithPopup
메서드에 사용자 인증 정보를 제공합니다. 그러면 사용자에게 프로젝트에 로그인하도록 요청하는 새 창이 트리거됩니다. 또는 signInWithRedirect
를 사용하여 인증 프로세스를 동일한 창에 유지할 수 있습니다.
Future<UserCredential> signInWithGoogle() async {
// Create a new provider
GoogleAuthProvider googleProvider = GoogleAuthProvider();
googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
'login_hint': 'user@example.com'
});
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithPopup(googleProvider);
// Or use signInWithRedirect
// return await FirebaseAuth.instance.signInWithRedirect(googleProvider);
}
Google Play 게임즈(Android만 해당)
Firebase Console에서 'Play 게임즈' 로그인 제공업체가 사용 설정되어 있어야 합니다. Play 게임즈 Firebase 프로젝트 설정에 대한 안내를 따르세요.
Firebase 앱에서 Play 게임즈 서비스 구성 안내를 따르세요.
Android
Future<void> _signInWithPlayGames() async {
// Get server auth code from 3rd party provider
// See PR description for details on how you might get the server auth code:
// https://github.com/firebase/flutterfire/pull/12201#issue-2100392487
final serverAuthCode = '...';
final playGamesCredential = PlayGamesAuthProvider.credential(
serverAuthCode: serverAuthCode);
await FirebaseAuth.instance
.signInWithCredential(playGamesCredential);
}
시작하기 전에 Facebook 개발자 앱을 설정하고 설정 절차에 따라 Facebook 로그인을 사용 설정합니다.
Facebook 앱 ID와 보안 비밀이 설정된 Firebase Console에서 'Facebook' 로그인 제공업체가 사용 설정되어 있어야 합니다.
iOS+ 및 Android
네이티브 플랫폼에서 Facebook SDK를 설치하고 인증 흐름을 트리거하려면 서드 파티 라이브러리가 필요합니다.
flutter_facebook_auth
플러그인을 설치합니다.
Android 및 iOS Facebook SDK 모두가 올바르게 초기화되었는지 확인하려면 플러그인 문서의 단계를 따라야 합니다. 완료되면 로그인 흐름을 트리거하고 Facebook 사용자 인증 정보를 만든 후 사용자를 로그인 처리합니다.
import 'package:flutter_facebook_auth/flutter_facebook_auth.dart';
Future<UserCredential> signInWithFacebook() async {
// Trigger the sign-in flow
final LoginResult loginResult = await FacebookAuth.instance.login();
// Create a credential from the access token
final OAuthCredential facebookAuthCredential = FacebookAuthProvider.credential(loginResult.accessToken.token);
// Once signed in, return the UserCredential
return FirebaseAuth.instance.signInWithCredential(facebookAuthCredential);
}
웹
웹에서 Firebase SDK는 제공되는 Facebook 애플리케이션 세부정보를 사용하여 Firebase Console에서 인증 흐름을 자동으로 처리할 수 있도록 지원합니다. 예를 들면 다음과 같습니다.
Facebook 제공업체를 생성하고, 해당 사용자로부터 얻고자 하는 추가 권한 범위를 제시합니다.
Firebase Console의 OAuth 리디렉션 URI가 Facebook 앱에 유효한 OAuth 리디렉션 URI로 추가되어 있는지 확인합니다.
FacebookAuthProvider facebookProvider = FacebookAuthProvider();
facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
'display': 'popup',
});
signInWithPopup
메서드에 사용자 인증 정보를 제공합니다. 그러면 사용자에게 Facebook 애플리케이션에 로그인하도록 요청하는 새 창이 트리거됩니다.
Future<UserCredential> signInWithFacebook() async {
// Create a new provider
FacebookAuthProvider facebookProvider = FacebookAuthProvider();
facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
'display': 'popup',
});
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithPopup(facebookProvider);
// Or use signInWithRedirect
// return await FirebaseAuth.instance.signInWithRedirect(facebookProvider);
}
Apple
iOS+
시작하기 전에 Apple로 로그인을 구성하고 Apple을 로그인 제공업체로 사용 설정합니다.
그런 다음 Runner
앱에 'Apple로 로그인' 기능이 있는지 확인합니다.
Android
시작하기 전에 Apple로 로그인을 구성하고 Apple을 로그인 제공업체로 사용 설정합니다.
웹
시작하기 전에 Apple로 로그인을 구성하고 Apple을 로그인 제공업체로 사용 설정합니다.
import 'package:firebase_auth/firebase_auth.dart';
Future<UserCredential> signInWithApple() async {
final appleProvider = AppleAuthProvider();
if (kIsWeb) {
await FirebaseAuth.instance.signInWithPopup(appleProvider);
} else {
await FirebaseAuth.instance.signInWithProvider(appleProvider);
}
}
Apple 플랫폼 로그인만 해당
iOS+ 플랫폼에서는 다음 방법을 사용하여 Apple에 로그인할 수도 있습니다.
// Implement a function that generates a nonce. See iOS documentation for how to create a nonce:
// https://firebase.google.com/docs/auth/ios/apple#sign_in_with_apple_and_authenticate_with_firebase
String rawNonce = createNonce();
// Create a SHA-256 hash of the nonce. Consider using the `crypto` package from the pub.dev registry.
String hashSHA256String = createHashSHA256String(rawNonce);
// Use the hash of the nonce to get the idToken. Consider using the `sign_in_with_apple` plugin from the pub.dev registry.
String idToken = await getIdToken();
final fullName = AppleFullPersonName(
familyName: 'Name',
givenName: 'Your',
);
// Use the `rawNonce` and `idToken` to get the credential
final credential = AppleAuthProvider.credentialWithIDToken(
idToken,
rawNonce,
fullName,
);
await FirebaseAuth.instance.signInWithCredential(credential);
Apple 인증 토큰 취소
Apple 플랫폼에서 Apple에 로그인하면 revokeTokenWithAuthorizationCode()
API를 사용하여 Apple 인증 토큰을 취소하는 데 사용할 수 있는 승인 코드가 반환됩니다.
import 'package:firebase_auth/firebase_auth.dart';
Future<UserCredential> signInWithApple() async {
final appleProvider = AppleAuthProvider();
UserCredential userCredential = await FirebaseAuth.instance.signInWithPopup(appleProvider);
// Keep the authorization code returned from Apple platforms
String? authCode = userCredential.additionalUserInfo?.authorizationCode;
// Revoke Apple auth token
await FirebaseAuth.instance.revokeTokenWithAuthorizationCode(authCode!);
}
Apple Game Center(Apple만 해당)
Firebase Console에서 'Game Center' 로그인 제공업체가 사용 설정되었는지 확인합니다. Game Center Firebase 프로젝트 설정에 대한 안내를 따르세요.
Firebase Game Center 사용자 인증 정보를 발급하고 Firebase를 통해 로그인하려면 먼저 Game Center에 로그인해야 합니다. 이를 수행하는 방법은 다음 안내를 참조하세요.
iOS+
Future<void> _signInWithGameCenter() async {
final credential = GameCenterAuthProvider.credential();
await FirebaseAuth.instance
.signInWithCredential(credential);
}
Microsoft
iOS+
시작하기 전에 iOS용 Microsoft 로그인을 구성하고 실행기에 커스텀 URL 스킴(1단계)을 추가합니다.
Android
시작하기 전에 Android용 Microsoft 로그인을 구성하세요.
앱의 SHA-1 디지털 지문을 추가해야 합니다.
웹
시작하기 전에 웹용 Microsoft 로그인을 구성하세요.
import 'package:firebase_auth/firebase_auth.dart';
Future<UserCredential> signInWithMicrosoft() async {
final microsoftProvider = MicrosoftAuthProvider();
if (kIsWeb) {
await FirebaseAuth.instance.signInWithPopup(microsoftProvider);
} else {
await FirebaseAuth.instance.signInWithProvider(microsoftProvider);
}
}
Firebase Console에서 '트위터' 로그인 제공업체가 사용 설정되었고 API 키와 API 비밀번호가 설정되었는지 확인합니다. 트위터 앱 구성의 앱 설정 페이지에서 Firebase OAuth 리디렉션 URI(예: my-app-12345.firebaseapp.com/__/auth/handler)가 승인 콜백 URL로 설정되어 있는지 확인합니다.
앱에 따라 승격된 API 액세스를 요청해야 할 수도 있습니다.
iOS+
iOS 가이드 1단계에 설명된 대로 커스텀 URL 스킴을 구성해야 합니다.
Android
아직 앱의 SHA-1 디지털 지문을 지정하지 않았다면 Firebase Console의 설정 페이지에서 지정합니다. 앱의 SHA-1 디지털 지문을 얻는 방법에 대한 자세한 내용은 클라이언트 인증을 참조하세요.
웹
즉시 사용할 수 있습니다.
import 'package:firebase_auth/firebase_auth.dart';
Future<void> _signInWithTwitter() async {
TwitterAuthProvider twitterProvider = TwitterAuthProvider();
if (kIsWeb) {
await FirebaseAuth.instance.signInWithPopup(twitterProvider);
} else {
await FirebaseAuth.instance.signInWithProvider(twitterProvider);
}
}
GitHub
GitHub 개발자 설정에 OAuth 앱이 설정되어 있고, Firebase Console에 'GitHub' 로그인 제공업체가 사용 설정되어 있으며, 클라이언트 ID와 보안 비밀이 설정되어 있고, GitHub 앱에 콜백 URL이 설정되어 있는지 확인합니다.
iOS+ 및 Android
네이티브 플랫폼의 경우 google-services.json
및 GoogleService-Info.plist
를 추가해야 합니다.
iOS의 경우 iOS 가이드 1단계에 설명된 대로 맞춤 URL 스킴을 추가합니다.
Future<UserCredential> signInWithGitHub() async {
// Create a new provider
GithubAuthProvider githubProvider = GithubAuthProvider();
return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}
웹
웹에서 GitHub SDK는 제공되는 GitHub 애플리케이션 세부정보를 사용하여 Firebase Console에서 인증 흐름을 자동으로 처리할 수 있도록 지원합니다. Firebase Console의 콜백 URL을 개발자 콘솔의 GitHub 애플리케이션에 콜백 URL로 추가해야 합니다.
예를 들면 다음과 같습니다.
GitHub 제공업체를 만들고 signInWithPopup
메서드에 사용자 인증 정보를 제공합니다. 그러면 사용자에게 GitHub 애플리케이션에 로그인하도록 요청하는 새 창이 트리거됩니다.
Future<UserCredential> signInWithGitHub() async {
// Create a new provider
GithubAuthProvider githubProvider = GithubAuthProvider();
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithPopup(githubProvider);
// Or use signInWithRedirect
// return await FirebaseAuth.instance.signInWithRedirect(githubProvider);
}
Yahoo
Firebase Console에서 'Yahoo' 로그인 제공업체가 사용 설정되어 있고 API 키와 API 비밀번호가 설정되어 있어야 합니다. 또한 Firebase OAuth 리디렉션 URI(예: my-app-12345.firebaseapp.com/__/auth/handler)가 앱의 Yahoo 개발자 네트워크 구성에서 리디렉션 URI로 설정되어 있는지 확인합니다.
iOS+
시작하기 전에 iOS용 Yahoo 로그인을 구성하고 실행기에 커스텀 URL 스킴(1단계)을 추가합니다.
Android
시작하기 전에 Android용 Yahoo 로그인을 구성하세요.
앱의 SHA-1 디지털 지문을 추가해야 합니다.
웹
즉시 사용할 수 있습니다.
import 'package:firebase_auth/firebase_auth.dart';
Future<UserCredential> signInWithYahoo() async {
final yahooProvider = YahooAuthProvider();
if (kIsWeb) {
await _auth.signInWithPopup(yahooProvider);
} else {
await _auth.signInWithProvider(yahooProvider);
}
}
OAuth 액세스 토큰 사용
AuthProvider를 사용하면 다음 요청을 통해 제공업체와 연결된 액세스 토큰을 가져올 수 있습니다.
final appleProvider = AppleAuthProvider();
final user = await FirebaseAuth.instance.signInWithProvider(appleProvider);
final accessToken = user.credential?.accessToken;
// You can send requests with the `accessToken`
인증 제공업체 연결
제공업체를 현재 사용자에게 연결하려는 경우 다음 메서드를 사용할 수 있습니다. ```dart await FirebaseAuth.instance.signInAnonymously();
final appleProvider = AppleAuthProvider();
if (kIsWeb) { await FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);
// 다음을 사용할 수도 있습니다. linkWithRedirect
} {
await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider);
}
// 이제 익명 사용자가 Apple 로그인에 연결할 수 있도록 업그레이드되었습니다. ```
제공업체 재인증
최근 로그인한 적이 있어야 진행할 수 있는 중요한 작업에 대해 새로운 사용자 인증 정보를 검색하는 데 사용할 수 있는 reauthenticateWithProvider
와 동일한 패턴을 사용하면 됩니다.
final appleProvider = AppleAuthProvider();
if (kIsWeb) {
await FirebaseAuth.instance.currentUser?.reauthenticateWithPopup(appleProvider);
// Or you can reauthenticate with a redirection
// await FirebaseAuth.instance.currentUser?.reauthenticateWithRedirect(appleProvider);
} else {
await FirebaseAuth.instance.currentUser?.reauthenticateWithProvider(appleProvider);
}
// You can now perform sensitive operations