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 Firebasekonsoli (kliknij Bezpieczeństwo > Uwierzytelnianie > karta Metoda logowania).
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 w 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 Firebase konsoli (otwórz Bezpieczeństwo > Uwierzytelnianie > kartę Metoda logowania). Postępuj zgodnie z tymi instrukcjami, aby skonfigurować projekt w Firebase w Grach Play.
Postępuj zgodnie z tymi instrukcjami konfigurowania usług Gier Play w aplikacji w 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.
Upewnij się, że dostawca logowania „Facebook” jest włączony w konsoli Firebase z ustawionym identyfikatorem aplikacji Facebooka i kluczem tajnym (otwórz Zabezpieczenia > Uwierzytelnianie > karta Metoda logowania).
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 Facebooka 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 za pomocą szczegółów aplikacji na Facebooku podanych w Firebase konsoli. Przykład:
Utwórz dostawcę Facebooka, podając dodatkowe zakresy uprawnień, które chcesz uzyskać od użytkownika.
Upewnij się, że identyfikator URI przekierowania OAuth z Firebase konsoli został dodany jako prawidłowy identyfikator URI przekierowania 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 Runner aplikacje 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)
Upewnij się, że dostawca logowania „Game Center” jest włączony w Firebase konsoli (otwórz kartę Bezpieczeństwo > Uwierzytelnianie > Metoda logowania). Postępuj zgodnie z tymi instrukcjami, aby skonfigurować projekt w Firebase w centrum gier.
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 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 Firebase konsoli
z ustawionym kluczem interfejsu API i kluczem tajnym interfejsu API
(otwórz Bezpieczeństwo > Uwierzytelnianie >
kartę Metoda logowania).
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 korzystającej z Twittera.
W zależności od aplikacji może być też konieczne przesłanie prośby o rozszerzony dostęp do interfejsu API.
iOS+
Musisz skonfigurować niestandardowy schemat URI adresu URL zgodnie z krokiem 1 w przewodniku po iOS.
Android
Jeśli nie zostało to jeszcze zrobione, określ odcisk cyfrowy SHA-1 aplikacji:
W konsoli Firebase otwórz
Ustawienia > kartę Ogólne.Przewiń w dół do karty Twoje aplikacje, wybierz aplikację na Androida i dodaj odcisk cyfrowy SHA-1 w polu Odciski cyfrowe certyfikatu SHA.
Więcej informacji o tym, jak uzyskać odcisk cyfrowy SHA aplikacji, znajdziesz w sekcji 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 (kliknij kolejno Zabezpieczenia > Uwierzytelnianie > karta Metoda logowania). Upewnij się, że identyfikator klienta i klucz tajny są ustawione, a adres URL wywołania zwrotnego jest ustawiony w aplikacji na GitHubie.
iOS+ i Android
W przypadku platform natywnych musisz dodać google-services.json i GoogleService-Info.plist.
W przypadku iOS dodaj niestandardowy schemat URI 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 Firebase konsoli. Upewnij się, że adres URL wywołania zwrotnego w Firebase konsoli jest dodany jako adres URL wywołania zwrotnego w aplikacji GitHub w konsoli dla deweloperów.
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 Firebase konsoli
z ustawionym kluczem interfejsu API i tajnym kluczem interfejsu API
(otwórz Bezpieczeństwo > Uwierzytelnianie >
karta Metoda logowania).
Upewnij się też, że 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 przez Yahoo na Androidzie.
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