Sosyal kimlik doğrulama, kullanıcıların bir hesapta oturum açmasına veya mevcut bir hesaba bağlanmasına olanak tanıyan çok adımlı bir kimlik doğrulama akışıdır.
Hem yerel platformlar hem de web, signInWithCredential veya linkWithCredential yöntemlerine iletilebilecek bir kimlik bilgisi oluşturmayı destekler. Alternatif olarak, web platformlarında kimlik doğrulama sürecini bir pop-up veya yönlendirme aracılığıyla tetikleyebilirsiniz.
Firebase ile Google ile Giriş kullanılırken yapılandırmanın çoğu zaten ayarlanmıştır ancak makinenizin SHA1 anahtarının Android ile kullanılacak şekilde yapılandırıldığından emin olmanız gerekir. Anahtarın nasıl oluşturulacağını kimlik doğrulama belgelerinde görebilirsiniz.
Firebase konsolunda "Google" ile oturum açma sağlayıcısının etkinleştirildiğinden emin olun.
Kullanıcınız, hesabı manuel olarak kaydettikten sonra Google ile oturum açarsa Firebase Authentication'ın güvenilir sağlayıcılar kavramı nedeniyle kimlik doğrulama sağlayıcısı otomatik olarak Google'a değişir. Bu konu hakkında daha fazla bilgiye buradan ulaşabilirsiniz.
iOS+ ve Android
Yerel platformlarda, kimlik doğrulama akışını tetiklemek için üçüncü taraf kitaplığı gerekir.
Resmi google_sign_in eklentisini yükleyin.
Uygulamayı yükledikten sonra oturum açma akışını tetikleyin ve yeni bir kimlik bilgisi oluşturun:
import 'package:google_sign_in/google_sign_in.dart';
Future<UserCredential> signInWithGoogle() async {
// Trigger the authentication flow
final GoogleSignInAccount? googleUser = await GoogleSignIn.instance.authenticate();
// Obtain the auth details from the request
final GoogleSignInAuthentication googleAuth = googleUser.authentication;
// Create a new credential
final credential = GoogleAuthProvider.credential(idToken: googleAuth.idToken);
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithCredential(credential);
}
Web
Firebase SDK, web'de Firebase projenizi kullanarak kimlik doğrulama akışını otomatik olarak işleme desteği sunar. Örneğin:
Kullanıcıdan almak istediğiniz ek izin kapsamını sağlayarak bir Google kimlik doğrulama sağlayıcısı oluşturun:
GoogleAuthProvider googleProvider = GoogleAuthProvider();
googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
'login_hint': 'user@example.com'
});
Kimlik bilgisini signInWithPopup yöntemine iletin. Bu işlem, kullanıcının projenizde oturum açmasını isteyen yeni bir pencerenin açılmasını tetikler. Alternatif olarak, kimlik doğrulama işlemini aynı pencerede tutmak için signInWithRedirect simgesini kullanabilirsiniz.
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 Games (yalnızca Android)
Firebase Console'da "Play Games" oturum açma sağlayıcısının etkinleştirildiğinden emin olun. Play Games Firebase projesi kurulumu için bu talimatları uygulayın.
Firebase uygulamanızla Play Games Hizmetleri'ni yapılandırma talimatlarını uygulayın.
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);
}
Başlamadan önce Facebook Geliştirici Uygulamanızı ayarlayın ve Facebook ile Giriş'i etkinleştirmek için kurulum sürecini takip edin.
Firebase Konsolu'nda "Facebook" giriş sağlayıcısının etkinleştirildiğinden emin olun. Facebook uygulama kimliği ve gizli anahtarı ayarlanmış olmalıdır.
iOS+ ve Android
Yerel platformlarda, Facebook SDK'sının yüklenmesi ve kimlik doğrulama akışının tetiklenmesi için üçüncü taraf kitaplığı gerekir.
flutter_facebook_auth eklentisini yükleyin.
Hem Android hem de iOS Facebook SDK'larının doğru şekilde başlatıldığından emin olmak için eklenti dokümanlarındaki adımları uygulamanız gerekir. İşlem tamamlandıktan sonra oturum açma akışını tetikleyin, Facebook kimlik bilgisi oluşturun ve kullanıcının oturum açmasını sağlayın:
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);
}
Web
Firebase SDK, web'de Firebase konsolunda sağlanan Facebook uygulama ayrıntılarını kullanarak kimlik doğrulama akışının otomatik olarak işlenmesi için destek sağlar. Örneğin:
Kullanıcıdan almak istediğiniz ek izin kapsamını sağlayarak bir Facebook sağlayıcısı oluşturun.
Firebase konsolundaki OAuth yönlendirme URI'sinin, Facebook uygulamanıza geçerli bir OAuth yönlendirme URI'si olarak eklendiğinden emin olun.
FacebookAuthProvider facebookProvider = FacebookAuthProvider();
facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
'display': 'popup',
});
Kimlik bilgisini signInWithPopup yöntemine iletin. Bu işlem, kullanıcının Facebook uygulamanızda oturum açmasını isteyen yeni bir pencerenin görünmesine neden olur:
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+
Başlamadan önce Apple ile oturum açma özelliğini yapılandırın ve Apple'ı oturum açma sağlayıcısı olarak etkinleştirin.
Ardından, Runner uygulamalarınızda "Apple ile oturum açma" özelliğinin bulunduğundan emin olun.
Android
Başlamadan önce Apple ile oturum açma özelliğini yapılandırın ve Apple'ı oturum açma sağlayıcısı olarak etkinleştirin.
Web
Başlamadan önce Apple ile oturum açma özelliğini yapılandırın ve Apple'ı oturum açma sağlayıcısı olarak etkinleştirin.
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);
}
}
Yalnızca Apple platformunda oturum açma
iOS+ platformlarında Apple ile oturum açma işlemi aşağıdaki yöntemle de gerçekleştirilebilir:
// 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 yetkilendirme jetonlarını iptal etme
Apple platformlarında Apple ile oturum açma, revokeTokenWithAuthorizationCode()
API kullanılarak Apple yetkilendirme jetonunu iptal etmek için kullanılabilecek bir yetkilendirme kodu döndürür.
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 (yalnızca Apple)
Firebase Console'da "Game Center" oturum açma sağlayıcısının etkinleştirildiğinden emin olun. Game Center Firebase projesi kurulumu için bu talimatları uygulayın.
Firebase Game Center kimlik bilgisi verilip Firebase üzerinden oturum açılabilmesi için önce Game Center ile giriş yapmanız gerekir. Bu işlemi nasıl yapacağınızla ilgili talimatları burada bulabilirsiniz.
iOS+
Future<void> _signInWithGameCenter() async {
final credential = GameCenterAuthProvider.credential();
await FirebaseAuth.instance
.signInWithCredential(credential);
}
Microsoft
iOS+
iOS için Microsoft oturum açma özelliğini yapılandırmaya başlamadan önce özel URL şemalarını Runner'ınıza ekleyin (1. adım).
Android
Başlamadan önce Android için Microsoft oturum açma özelliğini yapılandırın.
Uygulamanızın SHA-1 parmak izini eklemeyi unutmayın.
Web
Başlamadan önce Web için Microsoft oturum açma özelliğini yapılandırın.
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'da "Twitter" ile oturum açma sağlayıcısının etkinleştirildiğinden ve API anahtarı ile API gizli anahtarının ayarlandığından emin olun. Firebase OAuth yönlendirme URI'nizin (ör. my-app-12345.firebaseapp.com/__/auth/handler) Twitter uygulamanızın yapılandırmasındaki uygulama ayarları sayfanızda yetkilendirme geri çağırma URL'si olarak ayarlandığından emin olun.
Ayrıca, uygulamanıza bağlı olarak API erişimini yükseltme isteğinde bulunmanız da gerekebilir.
iOS+
Özel URL şemanızı iOS kılavuzunun 1. adımında açıklandığı gibi yapılandırmanız gerekir.
Android
Uygulamanızın SHA-1 parmak izini henüz belirtmediyseniz Firebase konsolunun Ayarlar sayfasından yapın. Uygulamanızın SHA-1 parmak izini alma hakkında ayrıntılı bilgi için İstemcinizin Kimliğini Doğrulama başlıklı makaleyi inceleyin.
Web
Kullanıma hazırdır.
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 Geliştirici Ayarları'ndan bir OAuth uygulaması oluşturduğunuzdan ve Firebase Console'da "GitHub" oturum açma sağlayıcısının etkinleştirildiğinden emin olun. Ayrıca, istemci kimliği ve gizli anahtarın ayarlandığından ve geri çağırma URL'sinin GitHub uygulamasında ayarlandığından emin olun.
iOS+ ve Android
Yerel platformlar için google-services.json ve GoogleService-Info.plist parametrelerini eklemeniz gerekir.
iOS için özel URL şemasını iOS kılavuzunun 1. adımında açıklandığı şekilde ekleyin.
Future<UserCredential> signInWithGitHub() async {
// Create a new provider
GithubAuthProvider githubProvider = GithubAuthProvider();
return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}
Web
Web'de GitHub SDK, Firebase konsolunda sağlanan GitHub uygulama ayrıntılarını kullanarak kimlik doğrulama akışının otomatik olarak işlenmesi için destek sağlar. Firebase konsolundaki geri çağırma URL'sinin, geliştirici konsolundaki GitHub uygulamanıza geri çağırma URL'si olarak eklendiğinden emin olun.
Örneğin:
GitHub sağlayıcı oluşturun ve kimlik bilgisini signInWithPopup yöntemine sağlayın. Bu işlem, kullanıcının GitHub uygulamanızda oturum açmasını isteyen yeni bir pencerenin görünmesini tetikler:
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'da "Yahoo" ile oturum açma sağlayıcısının etkinleştirildiğinden ve API anahtarı ile API gizli anahtarının ayarlandığından emin olun. Ayrıca Firebase OAuth yönlendirme URI'nizin (ör. my-app-12345.firebaseapp.com/__/auth/handler) uygulamanızın Yahoo Developer Network yapılandırmasında yönlendirme URI'si olarak ayarlandığından emin olun.
iOS+
Başlamadan önce iOS için Yahoo ile Giriş'i yapılandırın ve özel URL şemalarını Runner'ınıza ekleyin (1. adım).
Android
Başlamadan önce Android için Yahoo ile Giriş'i yapılandırın.
Uygulamanızın SHA-1 parmak izini eklemeyi unutmayın.
Web
Kullanıma hazırdır.
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 erişim jetonunu kullanma
AuthProvider kullanarak aşağıdaki isteği göndererek sağlayıcıyla ilişkili erişim jetonunu alabilirsiniz.
final appleProvider = AppleAuthProvider();
final user = await FirebaseAuth.instance.signInWithProvider(appleProvider);
final accessToken = user.credential?.accessToken;
// You can send requests with the `accessToken`
Kimlik doğrulama sağlayıcısı bağlama
Bir sağlayıcıyı mevcut bir kullanıcıya bağlamak istiyorsanız aşağıdaki yöntemi kullanabilirsiniz:
await FirebaseAuth.instance.signInAnonymously();
final appleProvider = AppleAuthProvider();
if (kIsWeb) {
await FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);
// You can also use `linkWithRedirect`
} else {
await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider);
}
// You're anonymous user is now upgraded to be able to connect with Sign In With Apple
Sağlayıcı ile yeniden kimlik doğrulama
Aynı kalıp, son giriş gerektiren hassas işlemler için yeni kimlik bilgilerini almak üzere kullanılabilen reauthenticateWithProvider ile de kullanılabilir.
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