Birleşik kimlik ve sosyal oturum açma

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.

Google

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);
}

Facebook

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

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

"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