Birleşik kimlik ve sosyal oturum açma

Sosyal kimlik doğrulama, bir kullanıcıyı bir hesapta oturum açmanıza veya mevcut bir hesapla ilişkilendirmenize 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 geçirilebilecek bir kimlik bilgisi oluşturmayı destekler. Alternatif olarak, web platformlarında, bir açılır pencere veya yönlendirme yoluyla kimlik doğrulama sürecini tetikleyebilirsiniz.

Google

Çoğu yapılandırma, Firebase ile Google Sign-In kullanırken zaten kuruludur, ancak makinenizin SHA1 anahtarının Android ile kullanım için yapılandırıldığından emin olmanız gerekir. Anahtarın nasıl oluşturulacağını Kurulum belgelerinde görebilirsiniz.

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

Kullanıcınız bir hesabı manuel olarak kaydettirdikten sonra Google'da oturum açarsa, Firebase Authentications'ın güvenilir sağlayıcılar konsepti nedeniyle kimlik doğrulama sağlayıcısı otomatik olarak Google'a geçer. Bununla ilgili daha fazla bilgiyi burada bulabilirsiniz .

iOS+ ve Android

Yerel platformlarda, kimlik doğrulama akışını tetiklemek için bir 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'de, Firebase SDK, 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 herhangi bir ek izin kapsamı sağlayarak bir Google yetkilendirme 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önteminin kimlik bilgilerini sağlayın. Bu, kullanıcının projenizde oturum açmasını isteyen yeni bir pencereyi tetikleyecektir. Alternatif olarak, kimlik doğrulama sürecini 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);
}

Facebook

Başlamadan önce Facebook Geliştirici Uygulamanızı kurun ve Facebook Girişini etkinleştirmek için kurulum sürecini takip edin.

Firebase Konsolunda "Facebook" oturum açma sağlayıcısının etkinleştirildiğinden emin olun. Facebook Uygulama Kimliği ve Gizli seti ile.

iOS+ ve Android

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

flutter_facebook_auth eklentisini kurun.

Hem Android hem de iOS Facebook SDK'larının doğru şekilde başlatıldığından emin olmak için eklenti belgelerindeki adımları izlemeniz gerekecek. Tamamlandığında, 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'de, Firebase SDK, 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 herhangi bir ek izin kapsamı sağlayan bir Facebook sağlayıcısı oluşturun.

Firebase konsolundan OAuth yönlendirme URI'sinin Facebook Uygulamanızda 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önteminin kimlik bilgilerini sağlayın. Bu, kullanıcının Facebook uygulamanızda oturum açmasını isteyen yeni bir pencereyi tetikleyecektir:

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

Elma

iOS+ ve Android

Başlamadan önce Apple ile Giriş Yap'ı 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 Giriş Yap" özelliğine sahip olduğundan emin olun.

sign_in_with_apple eklentisini ve crypto paketini kurun:

dependencies:
  sign_in_with_apple: ^3.0.0
  crypto: ^3.0.1
tutucu7 l10n-yer
import 'dart:convert';
import 'dart:math';

import 'package:crypto/crypto.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:sign_in_with_apple/sign_in_with_apple.dart';

/// Generates a cryptographically secure random nonce, to be included in a
/// credential request.
String generateNonce([int length = 32]) {
  const charset =
      '0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._';
  final random = Random.secure();
  return List.generate(length, (_) => charset[random.nextInt(charset.length)])
      .join();
}

/// Returns the sha256 hash of [input] in hex notation.
String sha256ofString(String input) {
  final bytes = utf8.encode(input);
  final digest = sha256.convert(bytes);
  return digest.toString();
}

Future<UserCredential> signInWithApple() async {
  // To prevent replay attacks with the credential returned from Apple, we
  // include a nonce in the credential request. When signing in with
  // Firebase, the nonce in the id token returned by Apple, is expected to
  // match the sha256 hash of `rawNonce`.
  final rawNonce = generateNonce();
  final nonce = sha256ofString(rawNonce);

  // Request credential for the currently signed in Apple account.
  final appleCredential = await SignInWithApple.getAppleIDCredential(
    scopes: [
      AppleIDAuthorizationScopes.email,
      AppleIDAuthorizationScopes.fullName,
    ],
    nonce: nonce,
  );

  // Create an `OAuthCredential` from the credential returned by Apple.
  final oauthCredential = OAuthProvider("apple.com").credential(
    idToken: appleCredential.identityToken,
    rawNonce: rawNonce,
  );

  // Sign in the user with Firebase. If the nonce we generated earlier does
  // not match the nonce in `appleCredential.identityToken`, sign in will fail.
  return await FirebaseAuth.instance.signInWithCredential(oauthCredential);
}

Başlamadan önce Apple ile Giriş Yap'ı 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 {
  // Create and configure an OAuthProvider for Sign In with Apple.
  final provider = OAuthProvider("apple.com")
    ..addScope('email')
    ..addScope('name');

  // Sign in the user with Firebase.
  return await FirebaseAuth.instance.signInWithPopup(provider);
}

Bir alternatif, signInWithRedirect kullanmaktır. Bu durumda tarayıcı uygulamanızdan uzaklaşacaktır ve uygulama başlatma sırasında kimlik doğrulama sonuçlarını kontrol etmek için getRedirectResult kullanmanız gerekir.

heyecan

Bir API Anahtarı ve API Gizli Anahtarı seti ile Firebase Konsolunda "Twitter" oturum açma sağlayıcısının etkinleştirildiğinden emin olun.

iOS+ ve Android

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

twitter_login eklentisini kurun:

dependencies:
  twitter_login: ^4.0.1

twitter_login yapılandırma adımlarını dikkatlice uyguladığınızdan ve Twitter Developer Portal'da eşleşen bir URL şemasıyla bir geri arama URL'si kaydettiğinizden emin olun.

import 'package:twitter_login/twitter_login.dart';

Future<UserCredential> signInWithTwitter() async {
  // Create a TwitterLogin instance
  final twitterLogin = new TwitterLogin(
    apiKey: '<your consumer key>',
    apiSecretKey:' <your consumer secret>',
    redirectURI: '<your_scheme>://'
  );

  // Trigger the sign-in flow
  final authResult = await twitterLogin.login();

  // Create a credential from the access token
  final twitterAuthCredential = TwitterAuthProvider.credential(
    accessToken: authResult.authToken!,
    secret: authResult.authTokenSecret!,
  );

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithCredential(twitterAuthCredential);
}

Web'de Twitter SDK, Firebase konsolunda sağlanan Twitter uygulama ayrıntılarını kullanarak kimlik doğrulama akışının otomatik olarak işlenmesi için destek sağlar. Firebase konsolundaki geri arama URL'sinin, geliştirici konsolundaki Twitter uygulamanıza bir geri arama URL'si olarak eklendiğinden emin olun.

Örneğin:

Bir Twitter sağlayıcısı oluşturun ve signInWithPopup yönteminin kimlik bilgilerini sağlayın. Bu, kullanıcının Twitter uygulamanızda oturum açmasını isteyen yeni bir pencereyi tetikleyecektir:

Future<UserCredential> signInWithTwitter() async {
  // Create a new provider
  TwitterAuthProvider twitterProvider = TwitterAuthProvider();

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithPopup(twitterProvider);

  // Or use signInWithRedirect
  // return await FirebaseAuth.instance.signInWithRedirect(twitterProvider);
}

GitHub

GitHub Geliştirici Ayarlarınızdan bir OAuth Uygulaması kurduğunuzdan ve "GitHub" oturum açma sağlayıcısının, GitHub uygulamasında ayarlanmış geri arama URL'si ile İstemci Kimliği ve Sır ayarlı olarak Firebase Konsolunda etkinleştirildiğinden emin olun.

iOS+ ve Android

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

github_sign_in eklentisini kurun:

dependencies:
  github_sign_in: ^0.0.5-dev.4

GitHubSignIn örneğini GitHub İstemci Kimliğiniz, GitHub İstemci Sırrı ve ayrıca bir Yönlendirme URL'si (Firebase geri arama url'si) ile doldurmanız gerekecektir. Tamamlandığında, oturum açma akışını tetikleyin, bir GitHub kimlik bilgisi oluşturun ve kullanıcının oturumunu açın:

import 'package:github_sign_in/github_sign_in.dart';

Future<UserCredential> signInWithGitHub() async {
  // Create a GitHubSignIn instance
      final GitHubSignIn gitHubSignIn = GitHubSignIn(
          clientId: clientId,
          clientSecret: clientSecret,
          redirectUrl: 'https://my-project.firebaseapp.com/__/auth/handler');

  // Trigger the sign-in flow
  final result = await gitHubSignIn.signIn(context);

  // Create a credential from the access token
  final githubAuthCredential = GithubAuthProvider.credential(result.token);

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithCredential(githubAuthCredential);
}

Web'de GitHub SDK, Firebase konsolunda sağlanan GitHub uygulama ayrıntılarını kullanarak kimlik doğrulama akışını otomatik olarak işlemek için destek sağlar. Firebase konsolundaki geri arama URL'sinin, geliştirici konsolundaki GitHub uygulamanıza bir geri arama URL'si olarak eklendiğinden emin olun.

Örneğin:

Bir GitHub sağlayıcısı oluşturun ve signInWithPopup yöntemine ilişkin kimlik bilgilerini sağlayın. Bu, 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);
}