Uwierzytelnianie społecznościowe to wieloetapowy proces uwierzytelniania, który umożliwia zalogowanie użytkownika na konto lub powiązanie go z istniejącym kontem.
Zarówno platformy natywne, jak i internetowe obsługują tworzenie danych logowania, które można następnie przekazywać do metod signInWithCredentiallub linkWithCredential. Na platformach internetowych możesz też uruchomić proces uwierzytelniania za pomocą wyskakującego okienka lub przekierowania.
Większość konfiguracji jest już skonfigurowana, gdy używasz logowania przez Google w Firebase, ale musisz się upewnić, że klucz SHA1 na Twoim komputerze został skonfigurowany do używania z Androidem. Informacje o tym, jak wygenerować klucz, znajdziesz w dokumentacji uwierzytelniania.
Sprawdź, czy dostawca logowania „Google” jest włączony w konsoli Firebase.
Jeśli użytkownik zaloguje się za pomocą Google po ręcznym zarejestrowaniu konta, dostawca uwierzytelniania automatycznie zmieni się na Google ze względu na koncepcję zaufanych dostawców w usłudze Firebase Authentication. Więcej informacji na ten temat znajdziesz tutaj.
iOS+ i Android
Na platformach natywnych do uruchomienia procesu uwierzytelniania wymagana jest biblioteka innej firmy.
Zainstaluj oficjalną wtyczkę google_sign_in.
Po zainstalowaniu uruchom proces logowania i utwórz nowe dane logowania:
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);
}
Sieć
W przypadku internetu pakiet SDK Firebase obsługuje automatyczne zarządzanie procesem uwierzytelniania za pomocą projektu Firebase. Przykład:
Utwórz dostawcę uwierzytelniania Google, podając dodatkowe zakresy uprawnień, które chcesz uzyskać od użytkownika:
GoogleAuthProvider googleProvider = GoogleAuthProvider();
googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
'login_hint': 'user@example.com'
});
Podaj dane logowania w metodzie signInWithPopup. Spowoduje to wyświetlenie nowego okna z prośbą o zalogowanie się w projekcie. Możesz też użyć signInWithRedirect, aby proces uwierzytelniania pozostał w tym samym oknie.
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);
}
Gry Google Play (tylko na Androidzie)
Sprawdź, czy dostawca logowania „Gry Play” jest włączony w konsoli Firebase. Postępuj zgodnie z tymi instrukcjami, aby skonfigurować projekt Firebase w Usługach gier Play.
Postępuj zgodnie z tymi instrukcjami konfigurowania usług gier Play w aplikacji Firebase.
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);
}
Zanim zaczniesz, skonfiguruj aplikację dla deweloperów na Facebooku i postępuj zgodnie z instrukcjami, aby włączyć logowanie przez Facebooka.
Sprawdź, czy dostawca logowania „Facebook” jest włączony w konsoli Firebase, a identyfikator aplikacji Facebooka i klucz tajny są ustawione.
iOS+ i Android
Na platformach natywnych do zainstalowania pakietu Facebook SDK i uruchomienia procesu uwierzytelniania wymagana jest biblioteka innej firmy.
Zainstaluj wtyczkę flutter_facebook_auth.
Aby upewnić się, że pakiety SDK Facebooka na Androida i iOS zostały prawidłowo zainicjowane, wykonaj czynności opisane w dokumentacji wtyczki. Po zakończeniu wywołaj proces logowania, utwórz dane logowania na Facebooku i zaloguj użytkownika:
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);
}
Sieć
W przypadku internetu pakiet SDK Firebase obsługuje automatyczne zarządzanie procesem uwierzytelniania przy użyciu szczegółów aplikacji na Facebooku podanych w konsoli Firebase. Przykład:
Utwórz dostawcę Facebooka, podając dodatkowe zakresy uprawnień, które chcesz uzyskać od użytkownika.
Upewnij się, że identyfikator URI przekierowania protokołu OAuth z konsoli Firebase został dodany jako prawidłowy identyfikator URI przekierowania protokołu OAuth w aplikacji na Facebooku.
FacebookAuthProvider facebookProvider = FacebookAuthProvider();
facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
'display': 'popup',
});
Podaj dane logowania w metodzie signInWithPopup. Spowoduje to wyświetlenie nowego okna z prośbą o zalogowanie się w aplikacji na Facebooku:
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+
Zanim zaczniesz, skonfiguruj logowanie się przez Apple i włącz Apple jako dostawcę logowania.
Następnie upewnij się, że Twoje Runneraplikacje mają funkcję „Zaloguj się przez Apple”.
Android
Zanim zaczniesz, skonfiguruj logowanie się przez Apple i włącz Apple jako dostawcę logowania.
Sieć
Zanim zaczniesz, skonfiguruj logowanie się przez Apple i włącz Apple jako dostawcę logowania.
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);
}
}
Tylko logowanie na platformie Apple
Logowanie przez Apple na platformach iOS+ można też zrealizować w ten sposób:
// 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);
Unieważnianie tokenów uwierzytelniania Apple
Logowanie przez Apple na platformach Apple zwraca kod autoryzacji, którego można użyć do unieważnienia tokena autoryzacji Apple za pomocą interfejsu revokeTokenWithAuthorizationCode()API.
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 (tylko Apple)
Sprawdź, czy dostawca logowania „Game Center” jest włączony w konsoli Firebase. Postępuj zgodnie z tymi instrukcjami, aby skonfigurować projekt Firebase w Game Center.
Zanim będzie można wydać dane logowania Game Center w Firebase i zalogować się za ich pomocą w Firebase, musisz zalogować się w Game Center. Tutaj znajdziesz instrukcje, jak to zrobić.
iOS+
Future<void> _signInWithGameCenter() async {
final credential = GameCenterAuthProvider.credential();
await FirebaseAuth.instance
.signInWithCredential(credential);
}
Microsoft
iOS+
Zanim zaczniesz, skonfiguruj logowanie Microsoft na urządzeniach z iOS i dodaj niestandardowe schematy adresów URL do narzędzia Runner (krok 1).
Android
Zanim zaczniesz, skonfiguruj logowanie za pomocą Microsoft na Androidzie.
Nie zapomnij dodać odcisku cyfrowego SHA-1 aplikacji.
Sieć
Zanim zaczniesz, skonfiguruj logowanie za pomocą Microsoft w przypadku sieci.
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);
}
}
Sprawdź, czy dostawca logowania „Twitter” jest włączony w konsoli Firebase i czy ustawiono klucz API oraz tajny klucz API. Upewnij się, że identyfikator URI przekierowania protokołu OAuth Firebase (np. my-app-12345.firebaseapp.com/__/auth/handler) jest ustawiony jako adres URL wywołania zwrotnego autoryzacji na stronie ustawień aplikacji w konfiguracji aplikacji na Twitterze.
W zależności od aplikacji może być też konieczne przesłanie prośby o zwiększenie dostępu do interfejsu API.
iOS+
Musisz skonfigurować schemat niestandardowego adresu URL zgodnie z instrukcjami w kroku 1 przewodnika po iOS.
Android
Jeśli nie masz jeszcze określonego odcisku cyfrowego SHA-1 aplikacji, zrób to na stronie Ustawienia w konsoli Firebase. Szczegółowe informacje o tym, jak uzyskać odcisk cyfrowy SHA-1 aplikacji, znajdziesz w artykule Uwierzytelnianie klienta.
Sieć
Działa od razu po wyjęciu z pudełka.
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
Upewnij się, że masz skonfigurowaną aplikację OAuth w ustawieniach dewelopera GitHub i że dostawca logowania „GitHub” jest włączony w konsoli Firebase. Musisz też ustawić identyfikator klienta i klucz tajny oraz adres URL wywołania zwrotnego w aplikacji GitHub.
iOS+ i Android
W przypadku platform natywnych musisz dodać google-services.json i GoogleService-Info.plist.
W przypadku iOS dodaj schemat niestandardowego adresu URL zgodnie z instrukcjami w kroku 1 przewodnika po iOS.
Future<UserCredential> signInWithGitHub() async {
// Create a new provider
GithubAuthProvider githubProvider = GithubAuthProvider();
return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}
Sieć
W internecie pakiet SDK GitHub obsługuje automatyczne zarządzanie procesem uwierzytelniania za pomocą szczegółów aplikacji GitHub podanych w konsoli Firebase. Sprawdź, czy URL wywołania zwrotnego w konsoli Firebase został dodany jako URL wywołania zwrotnego w aplikacji GitHub w konsoli dewelopera.
Przykład:
Utwórz dostawcę GitHub i podaj dane logowania w metodzie signInWithPopup. Spowoduje to wyświetlenie nowego okna z prośbą o zalogowanie się w aplikacji GitHub:
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
Sprawdź, czy dostawca logowania „Yahoo” jest włączony w konsoli Firebase i czy ustawiono klucz interfejsu API oraz tajny klucz interfejsu API. Sprawdź też, czy identyfikator URI przekierowania protokołu OAuth Firebase (np. my-app-12345.firebaseapp.com/__/auth/handler) jest ustawiony jako identyfikator URI przekierowania w konfiguracji sieci deweloperów Yahoo Twojej aplikacji.
iOS+
Zanim zaczniesz, skonfiguruj logowanie przez Yahoo na iOS i dodaj niestandardowe schematy adresów URL do narzędzia Runner (krok 1).
Android
Zanim zaczniesz, skonfiguruj logowanie w Yahoo na urządzeniach z Androidem.
Nie zapomnij dodać odcisku cyfrowego SHA-1 aplikacji.
Sieć
Działa od razu po wyjęciu z pudełka.
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);
}
}
Korzystanie z tokena dostępu OAuth
Korzystając z usługi AuthProvider, możesz pobrać token dostępu powiązany z dostawcą, wysyłając to żądanie.
final appleProvider = AppleAuthProvider();
final user = await FirebaseAuth.instance.signInWithProvider(appleProvider);
final accessToken = user.credential?.accessToken;
// You can send requests with the `accessToken`
Łączenie dostawcy uwierzytelniania
Jeśli chcesz połączyć dostawcę z bieżącym użytkownikiem, możesz użyć tej metody:
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
Ponowne uwierzytelnianie u dostawcy
Ten sam wzorzec można stosować w przypadku funkcji reauthenticateWithProvider, która umożliwia pobieranie nowych danych logowania do operacji wrażliwych wymagających niedawnego zalogowania się.
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