Die soziale Authentifizierung ist ein mehrstufiger Authentifizierungsvorgang, mit dem Sie einen Nutzer in einem Konto anmelden oder mit einem bestehenden Konto verknüpfen können.
Sowohl native Plattformen als auch das Web unterstützen die Erstellung von Anmeldedaten, die dann an die Methoden signInWithCredential oder linkWithCredential übergeben werden können. Alternativ können Sie auf Webplattformen den Authentifizierungsprozess über ein Pop-up oder eine Weiterleitung auslösen.
Die meisten Konfigurationen sind bereits eingerichtet, wenn Sie die Google-Anmeldung mit Firebase verwenden. Sie müssen jedoch dafür sorgen, dass der SHA1-Schlüssel Ihres Computers für die Verwendung mit Android konfiguriert wurde. Eine Anleitung zum Generieren des Schlüssels finden Sie in der Authentifizierungsdokumentation.
Prüfen Sie, ob der Anmeldeanbieter „Google“ in der Firebase Console aktiviert ist (gehen Sie zum Tab Sicherheit > Authentifizierung > Anmeldemethode).
Wenn sich Ihr Nutzer mit Google anmeldet, nachdem er bereits ein Konto manuell registriert hat, wird sein Authentifizierungsanbieter aufgrund des Konzepts der vertrauenswürdigen Anbieter von Firebase Authentication automatisch zu Google geändert. Weitere Informationen
iOS+ und Android
Auf nativen Plattformen ist eine Drittanbieterbibliothek erforderlich, um den Authentifizierungsablauf auszulösen.
Installieren Sie das offizielle google_sign_in-Plug-in.
Nach der Installation starten Sie den Anmeldevorgang und erstellen Sie einen neuen Berechtigungsnachweis:
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
Im Web unterstützt das Firebase SDK die automatische Verarbeitung des Authentifizierungsablaufs über Ihr Firebase-Projekt. Beispiel:
Erstellen Sie einen Google-Authentifizierungsanbieter und geben Sie alle zusätzlichen Berechtigungsbereiche an, die Sie vom Nutzer erhalten möchten:
GoogleAuthProvider googleProvider = GoogleAuthProvider();
googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
'login_hint': 'user@example.com'
});
Geben Sie die Anmeldedaten für die Methode signInWithPopup an. Dadurch wird ein neues Fenster geöffnet, in dem der Nutzer aufgefordert wird, sich in Ihrem Projekt anzumelden. Alternativ können Sie signInWithRedirect verwenden, um den Authentifizierungsprozess im selben Fenster zu belassen.
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 (nur Android)
Der Anmeldeanbieter „Play Spiele“ muss in der Firebase-Konsole aktiviert sein (gehen Sie zum Tab Sicherheit > Authentifizierung > Anmeldemethode). Folgen Sie dieser Anleitung zur Einrichtung eines Firebase-Projekts für Play Spiele.
Folgen Sie dieser Anleitung, um die Play-Spieldienste mit Ihrer Firebase-App zu konfigurieren.
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);
}
Bevor Sie beginnen, richten Sie Ihre Facebook-Entwickler-App ein und folgen Sie der Anleitung, um die Facebook-Anmeldung zu aktivieren.
Achten Sie darauf, dass der Anmeldeanbieter „Facebook“ in der Firebase-Konsole mit der Facebook-App-ID und dem Secret aktiviert ist (gehen Sie zum Tab Sicherheit > Authentifizierung > Anmeldemethode).
iOS+ und Android
Auf nativen Plattformen ist eine Drittanbieterbibliothek erforderlich, um das Facebook-SDK zu installieren und den Authentifizierungsablauf auszulösen.
Installieren Sie das flutter_facebook_auth-Plug-in.
Sie müssen die Schritte in der Plug-in-Dokumentation ausführen, um sicherzustellen, dass sowohl das Android- als auch das iOS-Facebook-SDK richtig initialisiert wurden. Lösen Sie nach Abschluss den Anmeldevorgang aus, erstellen Sie Anmeldedaten für Facebook und melden Sie den Nutzer 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);
}
Web
Im Web unterstützt das Firebase SDK die automatische Verarbeitung des Authentifizierungsablaufs mithilfe der in der Firebase-Konsole angegebenen Facebook-Anwendungsdetails. Beispiel:
Erstellen Sie einen Facebook-Anbieter und geben Sie alle zusätzlichen Berechtigungsbereiche an, die Sie vom Nutzer erhalten möchten.
Achten Sie darauf, dass der OAuth-Weiterleitungs-URI aus der Firebase-Konsole als gültiger OAuth-Weiterleitungs-URI in Ihrer Facebook-App hinzugefügt wird.
FacebookAuthProvider facebookProvider = FacebookAuthProvider();
facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
'display': 'popup',
});
Geben Sie die Anmeldedaten für die Methode signInWithPopup an. Dadurch wird ein neues Fenster geöffnet, in dem der Nutzer aufgefordert wird, sich in 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);
}
Apple
iOS+
Konfigurieren Sie die Anmeldung mit Apple und aktivieren Sie Apple als Anmeldeanbieter, bevor Sie beginnen.
Prüfen Sie als Nächstes, ob Ihre Runner-Apps die Funktion „Über Apple anmelden“ unterstützen.
Android
Konfigurieren Sie die Anmeldung mit Apple und aktivieren Sie Apple als Anmeldeanbieter, bevor Sie beginnen.
Web
Konfigurieren Sie die Anmeldung mit Apple und aktivieren Sie Apple als Anmeldeanbieter, bevor Sie beginnen.
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);
}
}
Nur Anmeldung über Apple-Plattform
Die Apple-Anmeldung auf iOS+-Plattformen kann auch mit der folgenden Methode erfolgen:
// 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-Authentifizierungstokens widerrufen
Bei der Apple-Anmeldung auf Apple-Plattformen wird ein Autorisierungscode zurückgegeben, mit dem das Apple-Authentifizierungstoken über die revokeTokenWithAuthorizationCode() API widerrufen werden kann.
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 (nur Apple)
Achten Sie darauf, dass der Anmeldeanbieter „Game Center“ in der Firebase Console aktiviert ist (gehen Sie zum Tab Sicherheit > Authentifizierung > Anmeldemethode). Folgen Sie dieser Anleitung zur Einrichtung eines Game Center-Firebase-Projekts.
Sie müssen sich mit Game Center anmelden, bevor eine Firebase Game Center-Anmeldedaten ausgestellt und über Firebase angemeldet werden können. Hier finden Sie eine Anleitung dazu.
iOS+
Future<void> _signInWithGameCenter() async {
final credential = GameCenterAuthProvider.credential();
await FirebaseAuth.instance
.signInWithCredential(credential);
}
Microsoft
iOS+
Bevor Sie beginnen, konfigurieren Sie die Microsoft-Anmeldung für iOS und fügen Sie Ihrem Runner die benutzerdefinierten URL-Schemas (Schritt 1) hinzu.
Android
Konfigurieren Sie die Microsoft-Anmeldung für Android, bevor Sie beginnen.
Vergessen Sie nicht, den SHA-1-Fingerabdruck Ihrer App hinzuzufügen.
Web
Konfigurieren Sie Microsoft Login for Web, bevor Sie beginnen.
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);
}
}
Achten Sie darauf, dass der Anmeldeanbieter „Twitter“ in der Firebase Console mit einem API-Schlüssel und einem API-Secret aktiviert ist (gehen Sie zum Tab Sicherheit > Authentifizierung > Anmeldemethode).
Achten Sie darauf, dass der Firebase-OAuth-Weiterleitungs-URI (z. B. my-app-12345.firebaseapp.com/__/auth/handler) als Autorisierungs-Callback-URL in den Einstellungen Ihrer App in der Konfiguration Ihrer Twitter-App festgelegt ist.
Möglicherweise müssen Sie auch erweiterten API-Zugriff für Ihre App beantragen.
iOS+
Sie müssen Ihr benutzerdefiniertes URL-Schema wie in Schritt 1 des iOS-Leitfadens beschrieben konfigurieren.
Android
Geben Sie den SHA‑1-Fingerabdruck Ihrer App an, falls noch nicht geschehen:
Rufen Sie in der Firebase Console die
Einstellungen > Allgemein auf.Scrollen Sie nach unten zur Karte Meine Apps, wählen Sie Ihre Android-App aus und fügen Sie Ihren SHA-1-Fingerabdruck in das Feld Fingerabdrücke für SHA-Zertifikat ein.
Weitere Informationen zum Abrufen des SHA-Fingerabdrucks Ihrer App finden Sie unter Client authentifizieren.
Web
Sofort einsatzbereit.
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
Sie müssen eine OAuth-App in Ihren GitHub-Entwicklereinstellungen eingerichtet haben und der Anmeldeanbieter „GitHub“ muss in der Firebase-Konsole aktiviert sein (gehen Sie zum Tab Anmeldemethode unter Sicherheit > Authentifizierung). Die Client-ID und das Secret müssen festgelegt sein und die Callback-URL muss in der GitHub-App festgelegt sein.
iOS+ und Android
Bei nativen Plattformen müssen Sie google-services.json und GoogleService-Info.plist hinzufügen.
Fügen Sie für iOS das benutzerdefinierte URL-Schema wie in Schritt 1 des iOS-Leitfadens beschrieben hinzu.
Future<UserCredential> signInWithGitHub() async {
// Create a new provider
GithubAuthProvider githubProvider = GithubAuthProvider();
return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}
Web
Im Web unterstützt das GitHub SDK die automatische Verarbeitung des Authentifizierungsablaufs mithilfe der in der Firebase-Konsole angegebenen GitHub-Anwendungsdetails. Achten Sie darauf, dass die Callback-URL in der Firebase-Konsole als Callback-URL in Ihrer GitHub-Anwendung in der Entwicklerkonsole hinzugefügt wird.
Beispiel:
Erstellen Sie einen GitHub-Anbieter und geben Sie die Anmeldedaten für die Methode signInWithPopup an. Dadurch wird ein neues Fenster geöffnet, in dem der Nutzer aufgefordert wird, sich in 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);
}
Yahoo!
Achten Sie darauf, dass der Anmeldeanbieter „Yahoo“ in der Firebase-Konsole mit einem API-Schlüssel und einem API-Secret aktiviert ist (gehen Sie zum Tab Sicherheit > Authentifizierung > Anmeldemethode).
Achten Sie außerdem darauf, dass Ihr Firebase-OAuth-Weiterleitungs-URI (z. B. my-app-12345.firebaseapp.com/__/auth/handler) in der Yahoo Developer Network-Konfiguration Ihrer App als Weiterleitungs-URI festgelegt ist.
iOS+
Bevor Sie beginnen, konfigurieren Sie die Yahoo-Anmeldung für iOS und fügen Sie die benutzerdefinierten URL-Schemas zu Ihrem Runner hinzu (Schritt 1).
Android
Konfigurieren Sie die Yahoo-Anmeldung für Android, bevor Sie beginnen.
Vergessen Sie nicht, den SHA-1-Fingerabdruck Ihrer App hinzuzufügen.
Web
Funktioniert sofort.
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-Zugriffstoken verwenden
Mit einem AuthProvider können Sie das mit dem Anbieter verknüpfte Zugriffstoken mit der folgenden Anfrage abrufen.
final appleProvider = AppleAuthProvider();
final user = await FirebaseAuth.instance.signInWithProvider(appleProvider);
final accessToken = user.credential?.accessToken;
// You can send requests with the `accessToken`
Authentifizierungsanbieter verknüpfen
Wenn Sie einen Anbieter mit einem aktuellen Nutzer verknüpfen möchten, können Sie die folgende Methode verwenden:
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
Noch einmal beim Anbieter authentifizieren
Dasselbe Muster kann mit reauthenticateWithProvider verwendet werden, um aktuelle Anmeldedaten für vertrauliche Vorgänge abzurufen, die eine aktuelle Anmeldung erfordern.
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