查看 2022 年 Google I/O 大会上介绍的 Firebase 新动态。了解详情

Föderierte Identität und soziale Anmeldung

Die soziale Authentifizierung ist ein mehrstufiger Authentifizierungsablauf, mit dem Sie einen Benutzer bei einem Konto anmelden oder ihn mit einem vorhandenen verknüpfen können.

Sowohl native Plattformen als auch das Web unterstützen die Erstellung eines Berechtigungsnachweises, der dann an die Methoden signInWithCredential oder linkWithCredential werden kann. Alternativ können Sie auf Webplattformen den Authentifizierungsprozess über ein Popup oder eine Weiterleitung auslösen.

Google

Die meisten Konfigurationen sind bereits eingerichtet, wenn Sie Google Sign-in mit Firebase verwenden, Sie müssen jedoch sicherstellen, dass der SHA1-Schlüssel Ihres Computers für die Verwendung mit Android konfiguriert wurde. Wie Sie den Schlüssel generieren, erfahren Sie in der Installationsdokumentation .

Stellen Sie sicher, dass der Anmeldeanbieter „Google“ in der Firebase-Konsole aktiviert ist .

Wenn sich Ihr Benutzer bei Google anmeldet, nachdem er bereits manuell ein Konto registriert hat, wechselt sein Authentifizierungsanbieter aufgrund des Firebase-Authentifizierungskonzepts vertrauenswürdiger Anbieter automatisch zu Google. Mehr dazu erfahren Sie hier .

iOS+ und Android

Auf nativen Plattformen ist eine Bibliothek eines Drittanbieters erforderlich, um den Authentifizierungsfluss auszulösen.

Installieren Sie das offizielle Plugin google_sign_in .

Lösen Sie nach der Installation den Anmeldevorgang aus und erstellen Sie neue Anmeldeinformationen:

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

Netz

Im Web bietet das Firebase SDK Unterstützung für die automatische Verarbeitung des Authentifizierungsablaufs mithilfe Ihres Firebase-Projekts. Zum Beispiel:

Erstellen Sie einen Google-Authentifizierungsanbieter und geben Sie alle zusätzlichen Berechtigungsbereiche an, die Sie vom Benutzer erhalten möchten:

GoogleAuthProvider googleProvider = GoogleAuthProvider();

googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
  'login_hint': 'user@example.com'
});

Stellen Sie die Anmeldeinformationen für die signInWithPopup Methode bereit. Dadurch wird ein neues Fenster angezeigt, in dem der Benutzer aufgefordert wird, sich bei Ihrem Projekt anzumelden. Alternativ können Sie signInWithRedirect verwenden, um den Authentifizierungsprozess im selben Fenster zu halten.

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

Bevor Sie beginnen, richten Sie Ihre Facebook-Entwickler-App ein und folgen Sie dem Einrichtungsprozess, um die Facebook-Anmeldung zu aktivieren.

Stellen Sie sicher, dass der Anmeldeanbieter „Facebook“ in der Firebase-Konsole aktiviert ist . mit der Facebook-App-ID und dem Secret-Set.

iOS+ und Android

Auf nativen Plattformen ist eine Bibliothek eines Drittanbieters erforderlich, um sowohl das Facebook-SDK zu installieren als auch den Authentifizierungsablauf auszulösen.

Installieren Sie das flutter_facebook_auth Plugin.

Sie müssen die Schritte in der Plugin-Dokumentation befolgen, um sicherzustellen, dass sowohl die Android- als auch die iOS-Facebook-SDKs korrekt initialisiert wurden. Lösen Sie nach Abschluss den Anmeldevorgang aus, erstellen Sie eine Facebook-Anmeldeinformation und melden Sie den Benutzer an:

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

Netz

Im Web bietet das Firebase SDK Unterstützung für die automatische Verarbeitung des Authentifizierungsablaufs mithilfe der Facebook-Anwendungsdetails, die in der Firebase-Konsole bereitgestellt werden. Zum Beispiel:

Erstellen Sie einen Facebook-Anbieter und geben Sie alle zusätzlichen Berechtigungsbereiche an, die Sie vom Benutzer erhalten möchten.

Stellen Sie sicher, dass der OAuth-Umleitungs-URI aus der Firebase-Konsole als gültiger OAuth-Umleitungs-URI in Ihrer Facebook-App hinzugefügt wird.

FacebookAuthProvider facebookProvider = FacebookAuthProvider();

facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
  'display': 'popup',
});

Stellen Sie die Anmeldeinformationen für die signInWithPopup Methode bereit. Dadurch wird ein neues Fenster angezeigt, in dem der Benutzer aufgefordert wird, sich bei Ihrer Facebook-Anwendung anzumelden:

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

Apfel

iOS+ und Android

Bevor Sie beginnen, konfigurieren Sie die Anmeldung mit Apple und aktivieren Sie Apple als Anmeldeanbieter .

Stellen Sie als Nächstes sicher, dass Ihre Runner -Apps über die Funktion „Mit Apple anmelden“ verfügen.

Installieren Sie das Plugin sign_in_with_apple sowie das crypto :

dependencies:
  sign_in_with_apple: ^3.0.0
  crypto: ^3.0.1
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);
}

Netz

Bevor Sie beginnen, konfigurieren Sie die Anmeldung mit Apple und aktivieren Sie Apple als Anmeldeanbieter .

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

Eine Alternative ist die Verwendung von signInWithRedirect . In diesem Fall navigiert der Browser von Ihrer App weg und Sie müssen getRedirectResult verwenden, um während des App-Starts nach Authentifizierungsergebnissen zu suchen.

Twitter

Stellen Sie sicher, dass der Anmeldeanbieter „Twitter“ auf der Firebase-Konsole mit einem API-Schlüssel und einem API-Secret-Satz aktiviert ist.

iOS+ und Android

Auf nativen Plattformen ist eine Bibliothek eines Drittanbieters erforderlich, um sowohl das Twitter SDK zu installieren als auch den Authentifizierungsablauf auszulösen.

Installieren Sie das twitter_login Plugin:

dependencies:
  twitter_login: ^4.0.1

Stellen Sie sicher, dass Sie die Konfigurationsschritte von twitter_login sorgfältig durchgehen und eine Rückruf-URL mit einem passenden URL-Schema beim Twitter Developer Portal registrieren

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

Netz

Im Web bietet das Twitter SDK Unterstützung für die automatische Verarbeitung des Authentifizierungsablaufs mithilfe der Twitter-Anwendungsdetails, die in der Firebase-Konsole bereitgestellt werden. Stellen Sie sicher, dass die Rückruf-URL in der Firebase-Konsole als Rückruf-URL in Ihrer Twitter-Anwendung auf der Entwicklerkonsole hinzugefügt wird.

Zum Beispiel:

Erstellen Sie einen Twitter-Anbieter und stellen Sie die Anmeldeinformationen für die signInWithPopup Methode bereit. Dadurch wird ein neues Fenster angezeigt, in dem der Benutzer aufgefordert wird, sich bei Ihrer Twitter-Anwendung anzumelden:

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

Stellen Sie sicher, dass Sie eine OAuth-App über Ihre GitHub-Entwicklereinstellungen eingerichtet haben und dass der „GitHub“-Anmeldeanbieter auf der Firebase-Konsole aktiviert ist, wobei die Client-ID und das Geheimnis festgelegt sind, wobei die Rückruf-URL in der GitHub-App festgelegt ist.

iOS+ und Android

Für native Plattformen müssen Sie google-services.json und GoogleService-Info.plist .

Fügen Sie für iOS das benutzerdefinierte URL-Schema hinzu, wie in Schritt 1 der iOS-Anleitung beschrieben .

import 'package:github_sign_in/github_sign_in.dart';

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

  return await _auth.signInWithAuthProvider(githubProvider);
}

Netz

Im Web bietet das GitHub SDK Unterstützung für die automatische Verarbeitung des Authentifizierungsablaufs mithilfe der GitHub-Anwendungsdetails, die in der Firebase-Konsole bereitgestellt werden. Stellen Sie sicher, dass die Rückruf-URL in der Firebase-Konsole als Rückruf-URL in Ihrer GitHub-Anwendung in der Entwicklerkonsole hinzugefügt wird.

Zum Beispiel:

Erstellen Sie einen GitHub-Anbieter und stellen Sie die Anmeldeinformationen für die signInWithPopup Methode bereit. Dadurch wird ein neues Fenster angezeigt, in dem der Benutzer aufgefordert wird, sich bei Ihrer GitHub-Anwendung anzumelden:

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