Birleştirilmiş kimlik ve sosyal oturum açma

Sosyal kimlik doğrulama, çok adımlı bir kimlik doğrulama akışıdır. Bu akış, kullanıcıların bir hesapta oturum açmasına veya mevcut bir hesaba bağlanmasına olanak tanı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.

Google

Firebase ile Google ile Oturum Açma 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" oturum açma sağlayıcısının etkinleştirildiğinden emin olun (Güvenlik > Kimlik doğrulama > Oturum açma yöntemi sekmesine gidin).

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 bilgiyi burada bulabilirsiniz.

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

Web'de Firebase SDK, Firebase projenizi kullanarak kimlik doğrulama akışını otomatik olarak işleme desteği 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 iletin. Bu işlem, kullanıcının projenizde oturum açmasını isteyen yeni bir pencerenin görünmesini 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 konsolunda "Play Games" giriş sağlayıcısının etkinleştirildiğinden emin olun (Güvenlik > Kimlik doğrulama > Giriş yöntemi sekmesine gidin). 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);
}

Facebook

Başlamadan önce Facebook Developer App'inizi ayarlayın ve Facebook ile Giriş'i etkinleştirmek için kurulum sürecini takip edin.

Firebase konsolunda Facebook Uygulama Kimliği ve Gizli Anahtar ayarlanmışken "Facebook" oturum açma sağlayıcısının etkinleştirildiğinden emin olun (Güvenlik > Kimlik doğrulama > Oturum açma yöntemi sekmesine gidin).

iOS+ ve Android

Yerel platformlarda, Facebook SDK'sını yüklemek ve kimlik doğrulama akışını tetiklemek 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şlenmesini destekler. Örneğin:

Kullanıcıdan almak istediğiniz ek izin kapsamları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 iletin. Bu işlem, kullanıcının Facebook uygulamanızda oturum açmasını isteyen yeni bir pencerenin görünmesini 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+ platformlarında Apple ile giriş işlemi aşağıdaki yöntemle de yapılabilir:

// 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 konsolunda "Game Center" oturum açma sağlayıcısının etkinleştirildiğinden emin olun (Güvenlik > Kimlik doğrulama > Oturum açma yöntemi sekmesine gidin). Game Center Firebase projesi kurulumu için bu talimatları uygulayın.

Firebase Game Center kimliği verilmeden ve Firebase üzerinden giriş yapılmadan önce Game Center ile giriş yapmanız gerekir. Bu işlemin nasıl yapılacağına dair talimatları burada bulabilirsiniz.

iOS+

Future<void> _signInWithGameCenter() async {
  final credential = GameCenterAuthProvider.credential();
  await FirebaseAuth.instance
      .signInWithCredential(credential);
}

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

Twitter

Firebase konsolunda "Twitter" oturum açma sağlayıcısının etkinleştirildiğinden emin olun. API anahtarı ve API gizli anahtarı ayarlanmış olmalıdır (Güvenlik > Kimlik doğrulama > Oturum açma yöntemi sekmesine gidin). Firebase OAuth yönlendirme URI'nizin (örneğin, my-app-12345.firebaseapp.com/__/auth/handler) Twitter uygulamanızın yapılandırmasındaki uygulama ayarları sayfasında yetkilendirme geri çağırma URL'si olarak ayarlandığından emin olun.

Ayrıca, uygulamanıza bağlı olarak daha yüksek API erişimi de isteyebilirsiniz.

iOS+

Özel URL şemanızı iOS kılavuzunun 1. adımında açıklandığı gibi yapılandırmanız gerekir.

Android

Henüz yapmadıysanız uygulamanızın SHA-1 parmak izini belirtin:

  1. Firebase konsolunda Ayarlar > Genel sekmesine gidin.

  2. Uygulamalarınız kartına gidin, Android uygulamanızı seçin ve SHA sertifikası parmak izleri alanına SHA-1 parmak izinizi ekleyin.

Uygulamanızın SHA 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 konsolunda "GitHub" oturum açma sağlayıcısının etkinleştirildiğinden emin olun (Güvenlik > Kimlik Doğrulama > Oturum açma yöntemi sekmesine gidin). Geri çağırma URL'si GitHub uygulamasında ayarlanmışken istemci kimliği ve Gizli Anahtarın 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ısı 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 konsolunda "Yahoo" oturum açma sağlayıcısının etkin olduğundan ve API anahtarı ile API gizli anahtarının ayarlandığından emin olun (Güvenlik > Kimlik doğrulama > Oturum açma yöntemi sekmesine gidin). Ayrıca Firebase OAuth yönlendirme URI'nizin (örneğin, 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 Girişi'ni 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 oturum açma işlemi 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