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 hesaba bağlaması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 bir pop-up veya yönlendirme aracılığıyla da tetikleyebilirsiniz.

Google

Firebase ile Google Oturum Açma özelliği kullanılırken çoğu yapılandırma zaten kurulur. 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 bulabilirsiniz.

Firebase Konsolu'nda "Google" oturum açma sağlayıcının etkinleştirildiğinden emin olun.

Kullanıcınız manuel olarak bir hesabı kaydettikten sonra Google ile oturum açarsa Firebase Authentications güvenilir sağlayıcılar kavramı nedeniyle, kullanıcının kimlik doğrulama sağlayıcısı otomatik olarak Google ile değiştirilir. Bu konu hakkında daha fazla bilgiye buradan ulaşabilirsiniz.

iOS+ ve Android

Yerel platformlarda kimlik doğrulama akışını başlatmak için 3. taraf kitaplığı gerekir.

Resmi google_sign_in eklentisini yükleyin.

Yüklendikten 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

Firebase SDK'sı, web'de Firebase projeniz kullanılarak kimlik doğrulama akışının otomatik olarak yönetilmesi için destek sağlar. Örnek:

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

signInWithPopup yöntemine kimlik bilgisini sağlayın. Bu işlem, kullanıcıdan projenizde oturum açmasının istendiği yeni bir pencereyi tetikler. Alternatif olarak, kimlik doğrulama işlemini aynı pencerede tutmak için signInWithRedirect 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

Play Games'te Oturum Açma özelliğini kullanarak Android oyununuzdaki kullanıcıların kimliğini doğrulayabilirsiniz.

Android

Android'de Google kurulumu talimatlarını uygulayın, ardından Play Games hizmetlerini Firebase uygulama bilgilerinizle yapılandırın.

Aşağıdakiler oturum açma akışını tetikler, yeni bir kimlik bilgisi oluşturur ve kullanıcıda oturum açar:

final googleUser = await GoogleSignIn(
  signInOption: SignInOption.games,
).signIn();

final googleAuth = await googleUser?.authentication;

if (googleAuth != null) {
  // Create a new credential
  final credential = GoogleAuthProvider.credential(
    accessToken: googleAuth.accessToken,
    idToken: googleAuth.idToken,
  );

  // Once signed in, return the UserCredential
  await _auth.signInWithCredential(credential);
}

Facebook

Başlamadan önce Facebook Geliştirici Uygulamanızı kurun ve Facebook Girişi'ni etkinleştirmek için kurulum işlemini uygulayın.

Firebase Console'da "Facebook" oturum açma sağlayıcısının etkinleştirildiğinden emin olun. Facebook Uygulama Kimliği ve Gizli Anahtar ayarıyla.

iOS+ ve Android

Yerel platformlarda hem Facebook SDK'sını yüklemek hem de kimlik doğrulama akışını tetiklemek için 3. taraf kitaplığı gerekir.

flutter_facebook_auth eklentisini yükleyin.

Hem Android hem de iOS Facebook SDK'sının doğru şekilde başlatıldığından emin olmak için eklenti dokümanlarındaki adımları uygulamanız gerekir. İşlem tamamlandığında, oturum açma akışını başlatın, 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'sı, web'de Firebase konsolunda sağlanan Facebook uygulama ayrıntılarını kullanarak kimlik doğrulama akışını otomatik olarak yönetme desteği sunar. Örnek:

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

signInWithPopup yöntemine kimlik bilgisini sağlayın. Bu işlem, kullanıcıdan Facebook uygulamanızda oturum açmasını isteyen yeni bir pencereyi 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);
  }
}

Apple kimlik doğrulama jetonlarını iptal et

Apple platformlarında Apple ile oturum açma özelliği, revokeTokenWithAuthorizationCode() API'yi kullanarak Apple kimlik doğrulama jetonunu iptal etmek için kullanılabilen 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!);
}

Microsoft

iOS ve üzeri

Başlamadan önce iOS için Microsoft Giriş'i yapılandırın ve Çalıştırıcınıza özel URL şemaları ekleyin (1. adım).

Android

Başlamadan önce Android için Microsoft Giriş'i yapılandırın.

Uygulamanızın SHA-1 parmak izini eklemeyi unutmayın.

Web

Başlamadan önce Web için Microsoft Giriş'i 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

Firebase Konsolu'nda "Twitter" oturum açma sağlayıcısının bir API Anahtarı ve API Gizli Anahtarı seti ile etkinleştirildiğinden emin olun. Firebase OAuth yönlendirme URI'nizin (ör. my-app-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 istemeniz de gerekebilir.

iOS ve üzeri

Ö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 bunu yapın. Uygulamanızın SHA-1 parmak izini nasıl alacağınızla ilgili ayrıntılar için İstemcinizin Kimliğini Doğrulama başlıklı makaleyi inceleyin.

Web

Kullanıma hazı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 Console'da "GitHub" oturum açma sağlayıcısının, GitHub uygulamasında istemci kimliği ve gizli anahtarın ayarlanmış olarak etkinleştirildiğinden emin olun.

iOS+ ve Android

Yerel platformlar için google-services.json ve GoogleService-Info.plist eklemeniz gerekir.

iOS için iOS kılavuzunun 1. adımında açıklandığı şekilde özel URL şemasını ekleyin.

Future<UserCredential> signInWithGitHub() async {
  // Create a new provider
  GithubAuthProvider githubProvider = GithubAuthProvider();

  return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}

Web

GitHub SDK'sı, web'de 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.

Örnek:

Bir GitHub sağlayıcısı oluşturun ve signInWithPopup yöntemine kimlik bilgisini sağlayın. Bu işlem, kullanıcıdan GitHub uygulamanızda oturum açmasını isteyen yeni bir pencereyi 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 Konsolu'nda "Yahoo" oturum açma sağlayıcısının bir API Anahtarı ve API Gizli Anahtarı grubuyla etkinleştirildiğinden 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 ve üzeri

Başlamadan önce, iOS için Yahoo Girişi'ni yapılandırın ve Çalıştırıcınıza özel URL şemalarını ekleyin (1. adım).

Android

Başlamadan önce Android için Yahoo Login'i yapılandırın.

Uygulamanızın SHA-1 parmak izini eklemeyi unutmayın.

Web

Kullanıma hazı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 istekte bulunarak 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 şu yöntemi kullanabilirsiniz: ```dart await FirebaseAuth.instance.signInAnonymously();

final appleProvider = AppleAuthProvider();

if (kIsWeb) { await FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);

// linkWithRedirect } else { await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider); } kullanabilirsiniz

// Anonim kullanıcınız Apple ile Oturum Açma özelliğiyle bağlantı kurabilecek şekilde yükseltildi ```

Sağlayıcı ile yeniden kimlik doğrula

Aynı kalıp, yakın zamanda giriş yapılmasını gerektiren hassas işlemler için yeni kimlik bilgileri almak amacıyla 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