Sosyal kimlik doğrulama, kullanıcının bir hesapta oturum açmasına veya mevcut bir hesapla bağlantı kurmasına olanak tanıyan çok adımlı bir kimlik doğrulama akışıdır.
Hem yerel platformlar hem de web, daha sonra signInWithCredential
veya linkWithCredential
yöntemlerine iletilebilecek bir kimlik bilgisi oluşturmayı destekler. Alternatif olarak, web platformlarında kimlik doğrulama işlemini pop-up veya yönlendirme aracılığıyla da tetikleyebilirsiniz.
Firebase ile Google ile oturum açma özelliği kullanılırken çoğu yapılandırma zaten ayarlanmıştır. Ancak makinenizin SHA1 anahtarının Android ile kullanılmak üzere yapılandırıldığından emin olmanız gerekir. Anahtarı nasıl oluşturacağınızı kimlik doğrulama belgelerinde görebilirsiniz.
Firebase Konsolu'nda "Google" oturum açma sağlayıcısının etkinleştirildiğinden emin olun.
Kullanıcınız, daha önce manuel olarak bir hesap kaydettikten sonra Google ile oturum açarsa Firebase Authentication'in güvenilir sağlayıcılar kavramı nedeniyle kimlik doğrulama sağlayıcısı otomatik olarak Google olarak 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 bir üçüncü taraf kitaplığı gerekir.
Resmi google_sign_in
eklentisini yükleyin.
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().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);
}
Web
Web'de Firebase SDK'sı, Firebase projenizi kullanarak kimlik doğrulama akışını otomatik olarak işlemek için destek sağlar. Ö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 sağlayın. Bu işlem, kullanıcıdan projenizde oturum açmasını isteyen yeni bir pencerenin gösterilmesini tetikler. Alternatif olarak, kimlik doğrulama sürecini aynı pencerede tutmak için signInWithRedirect
simgesini de 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 projesini ayarlama ile ilgili bu talimatları uygulayın.
Firebase uygulamanızla Play Games hizmetlerini yapılandırmayla ilgili talimatları 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ı oluşturun ve Facebook girişini etkinleştirmek için kurulum sürecini uygulayın.
"Facebook" oturum açma sağlayıcısının Firebase Konsolu'nda etkinleştirildiğinden ve Facebook uygulama kimliği ile gizlisinin ayarlandığından emin olun.
iOS ve Android
Yerel platformlarda hem Facebook SDK'sını yüklemek hem de kimlik doğrulama akışını tetiklemek için bir üçü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ında yer alan adımları uygulamanız gerekir. İşlem tamamlandıktan sonra oturum açma akışını tetikleyin, bir Facebook kimlik bilgisi oluşturun ve kullanıcının oturumunu açı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
Web'de Firebase SDK'sı, Firebase konsolunda sağlanan Facebook uygulama ayrıntılarını 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 Facebook sağlayıcı 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 sağlayın. Bu işlem, kullanıcıdan Facebook uygulamanızda oturum açmasını isteyen yeni bir pencerenin gösterilmesini tetikler:
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ızın "Apple ile oturum aç" özelliğine sahip olduğ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 ve sonraki sürüm platformlarda 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 kimlik doğrulama jetonlarını iptal etme
Apple platformlarındaki Apple oturum açma özelliği, revokeTokenWithAuthorizationCode()
API'yi kullanarak Apple kimlik doğrulama 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 projesini ayarlama ile ilgili bu talimatları uygulayın.
Firebase Game Center kimlik bilgisinin oluşturulması ve Firebase üzerinden giriş yapılması için Game Center ile giriş yapmanız gerekir. Bu işlemi nasıl yapacağınızla ilgili bazı talimatları aşağıda bulabilirsiniz.
iOS+
Future<void> _signInWithGameCenter() async {
final credential = GameCenterAuthProvider.credential();
await FirebaseAuth.instance
.signInWithCredential(credential);
}
Microsoft
iOS+
Başlamadan önce iOS için Microsoft Hesabı'nı yapılandırın ve özel URL şemalarını Runner'ınıza ekleyin (1. adım).
Android
Başlamadan önce Android için Microsoft Hesabı'nı yapılandırın.
Uygulamanızın SHA-1 parmak izini eklemeyi unutmayın.
Web
Başlamadan önce Web için Microsoft Hesabı'nı 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);
}
}
"Twitter" oturum açma sağlayıcısının, API anahtarı ve API gizlisi ayarlanmış olarak Firebase Console'da etkinleştirildiğinden emin olun. Firebase OAuth yönlendirme URI'nizin (ör. uygulamam-12345.firebaseapp.com/__/auth/handler), Twitter uygulamanızın yapılandırmasında uygulamanızın ayarlar sayfasında yetkilendirme geri çağırma URL'niz olarak ayarlandığından emin olun.
Ayrıca, uygulamanıza bağlı olarak üst düzey API erişimi isteğinde bulunmanız gerekebilir.
iOS+
Özel URL şemanızı iOS kılavuzunun 1. adımında açıklandığı şekilde yapılandırmanız gerekir.
Android
Uygulamanızın SHA-1 parmak izini henüz belirtmediyseniz Firebase konsolunun Ayarlar sayfasından belirtebilirsiniz. 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ınızdan bir OAuth uygulaması oluşturduğunuzdan ve Firebase Konsolu'nda "GitHub" oturum açma sağlayıcısının, istemci kimliği ve gizli anahtarı ayarlanmış, geri çağırma URL'si ise GitHub uygulamasında ayarlanmış şekilde etkinleştirildiğinden emin olun.
iOS ve Android
Yerel platformlar için google-services.json
ve GoogleService-Info.plist
öğelerini eklemeniz gerekir.
iOS için özel URL şemasını iOS kılavuzundaki 1. adımda 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'sı, Firebase konsolunda sağlanan GitHub uygulama ayrıntılarını kullanarak kimlik doğrulama akışını otomatik olarak işleme desteği sunar. 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:
Bir GitHub sağlayıcısı oluşturun ve kimlik bilgisini signInWithPopup
yöntemine sağlayın. Bu işlem, kullanıcıdan GitHub uygulamanızda oturum açmasını isteyen yeni bir pencerenin gösterilmesini 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
"Yahoo" oturum açma sağlayıcısının, API anahtarı ve API gizlisi ayarlanmış olarak Firebase Console'da etkinleştirildiğinden emin olun. Ayrıca, Firebase OAuth yönlendirme URI'nizin (ör. uygulamam-12345.firebaseapp.com/__/auth/handler) uygulamanızın Yahoo Geliştirici Ağı yapılandırmasında yönlendirme URI'si olarak ayarlandığından emin olun.
iOS+
Başlamadan önce iOS için Yahoo 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 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ıyla yeniden kimlik doğrulama
Aynı kalıp, son giriş yapılmasını gerektiren hassas işlemler için yeni kimlik bilgileri almak üzere kullanılabilen reauthenticateWithProvider
ile 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