Uwierzytelnianie społecznościowe to wieloetapowy proces uwierzytelniania, który umożliwia zalogowanie użytkownika na konto lub połączenie go z istniejącym kontem.
Zarówno platformy natywne, jak i internetowe obsługują tworzenie danych logowania, które można następnie przekazać do metody signInWithCredential
lub linkWithCredential
. Na platformach internetowych proces uwierzytelniania można też aktywować w wyskakującym okienku lub w przekierowaniu.
Większość konfiguracji jest już konfigurowana w przypadku korzystania z funkcji Logowania przez Google za pomocą Firebase, ale musisz upewnić się, że klucz SHA1 Twojego komputera jest skonfigurowany do użycia z Androidem. Instrukcję generowania klucza znajdziesz w dokumentacji uwierzytelniania.
Upewnij się, że w konsoli Firebase włączony jest dostawca logowania „Google”.
Jeśli użytkownik zaloguje się przez Google, to po ręcznym zarejestrowaniu konta jego dostawca uwierzytelniania automatycznie zmieni się na Google. Wynika to z koncepcji zaufanych dostawców w Uwierzytelnianiech Firebase. Więcej informacji na ten temat znajdziesz tutaj.
iOS+ i Android
Na platformach natywnych do aktywowania procesu uwierzytelniania wymagana jest biblioteka zewnętrzna.
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().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);
}
Internet
Pakiet SDK Firebase zapewnia obsługę automatycznej obsługi procesu uwierzytelniania z wykorzystaniem projektu Firebase w przeglądarce. Przykład:
Utwórz dostawcę uwierzytelniania Google określający wszelkie 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 do metody signInWithPopup
. Pojawi się nowe okno z prośbą o zalogowanie się w projekcie. Możesz też użyć signInWithRedirect
, aby zachować proces uwierzytelniania 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
Możesz uwierzytelniać użytkowników w grach na Androida za pomocą logowania przez Gry Play.
Android
Wykonaj instrukcje konfiguracji Google na urządzeniu z Androidem, a potem skonfiguruj usługi gier Play z wykorzystaniem informacji z aplikacji Firebase.
Wykonanie poniższych czynności spowoduje uruchomienie procesu logowania, utworzenie nowych danych logowania i zalogowanie użytkownika:
final googleUser = await GoogleSignIn(
signInOption: SignInOption.games,
).signIn();
final googleAuth = await googleUser?.authentication;
if (googleAuth != null) {
// Create a new credential
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
// Once signed in, return the UserCredential
await _auth.signInWithCredential(credential);
}
Zanim zaczniesz, skonfiguruj Facebook Developer App i wykonaj proces konfiguracji, aby włączyć logowanie przez Facebooka.
Sprawdź, czy w konsoli Firebase jest włączony dostawca logowania „Facebook” z ustawionym identyfikatorem aplikacji i tajnym kluczem Facebooka.
iOS+ i Android
Do zainstalowania pakietu SDK Facebooka i aktywowania procesu uwierzytelniania na platformach natywnych wymagana jest biblioteka zewnętrzna.
Zainstaluj wtyczkę flutter_facebook_auth
.
Musisz wykonać czynności opisane w dokumentacji wtyczki, by mieć pewność, że pakiety SDK Facebooka na Androida i iOS zostały prawidłowo zainicjowane. Gdy to zrobisz, uruchom proces logowania, utwórz dane logowania do 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);
}
Internet
W wersji internetowej pakiet SDK Firebase zapewnia obsługę automatycznej obsługi procesu uwierzytelniania za pomocą szczegółów aplikacji Facebooka podanych w konsoli Firebase. Przykład:
Utwórz dostawcę Facebooka i podaj wszelkie dodatkowe zakresy uprawnień, które chcesz uzyskać od użytkownika.
Sprawdź, czy identyfikator URI przekierowania OAuth z konsoli Firebase został dodany jako prawidłowy identyfikator URI przekierowania OAuth w aplikacji Facebook.
FacebookAuthProvider facebookProvider = FacebookAuthProvider();
facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
'display': 'popup',
});
Podaj dane logowania do metody signInWithPopup
. Pojawi się nowe okno z prośbą o zalogowanie się w aplikacji Facebook:
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 funkcję Zaloguj się przez Apple i włącz Apple jako dostawcę logowania.
Następnie upewnij się, że Twoje aplikacje z systemu Runner
mają funkcję „Zaloguj się przez Apple”.
Android
Zanim zaczniesz, skonfiguruj funkcję Zaloguj się przez Apple i włącz Apple jako dostawcę logowania.
Internet
Zanim zaczniesz, skonfiguruj funkcję Zaloguj 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);
}
}
Unieważnianie tokenów uwierzytelniania Apple
Logowanie Apple na platformach Apple zwraca kod autoryzacji, którego można użyć do unieważnienia tokena uwierzytelniania Apple za pomocą interfejsu API revokeTokenWithAuthorizationCode()
.
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!);
}
Microsoft
iOS+
Zanim zaczniesz, skonfiguruj Microsoft Login na iOS i dodaj schematy niestandardowych adresów URL do Runnera (krok 1).
Android
Zanim zaczniesz, skonfiguruj Microsoft Login na Androida.
Nie zapomnij dodać odcisku cyfrowego SHA-1 swojej aplikacji.
Internet
Zanim zaczniesz, skonfiguruj Microsoft Login for Web.
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 w konsoli Firebase włączony jest dostawca logowania „Twitter” z ustawionym kluczem interfejsu API i tajnym kluczem interfejsu API. Sprawdź, czy identyfikator URI przekierowania OAuth Firebase (np. my-app-12345.firebaseapp.com/__/auth/handler) jest ustawiony jako adres URL wywołania zwrotnego autoryzacji w ustawieniach aplikacji w sekcji Konfiguracja aplikacji na Twitterze.
W zależności od aplikacji może być też konieczne wysłanie prośby o podwyższone uprawnienia dostępu przez interfejs API.
iOS+
Musisz skonfigurować niestandardowy schemat URL zgodnie z opisem w kroku 1 przewodnika na iOS.
Android
Jeśli nie masz jeszcze zdefiniowanego odcisku cyfrowego SHA-1 swojej aplikacji, możesz to zrobić na stronie ustawień w konsoli Firebase. Szczegółowe informacje o uzyskiwaniu odcisku cyfrowego SHA-1 aplikacji znajdziesz w artykule Uwierzytelnianie klienta.
Internet
Działa od razu po uruchomieniu.
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
Sprawdź, czy w ustawieniach dewelopera GitHub masz skonfigurowaną aplikację OAuth i czy w konsoli Firebase jest włączony dostawca logowania „GitHub” z identyfikatorem klienta i kluczem tajnym oraz adresem URL wywołania zwrotnego ustawionym 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 opisem w kroku 1 w przewodniku po iOS.
Future<UserCredential> signInWithGitHub() async {
// Create a new provider
GithubAuthProvider githubProvider = GithubAuthProvider();
return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}
Internet
W przeglądarce pakiet GitHub SDK zapewnia obsługę automatycznej obsługi procesu uwierzytelniania z wykorzystaniem danych aplikacji GitHub podanych w konsoli Firebase. Sprawdź, czy URL wywołania zwrotnego w konsoli Firebase został dodany jako adres URL wywołania zwrotnego w aplikacji GitHub w konsoli programisty.
Przykład:
Utwórz dostawcę GitHuba i podaj dane logowania do metody 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 w konsoli Firebase jest włączony dostawca logowania „Yahoo” z ustawionym kluczem interfejsu API i tajnym kluczem interfejsu API. Upewnij się też, że identyfikator URI przekierowania OAuth Firebase (np. my-app-12345.firebaseapp.com/__/auth/handler) jest ustawiony jako identyfikator URI przekierowania w konfiguracji Yahoo Developer Network Twojej aplikacji.
iOS+
Zanim zaczniesz, skonfiguruj Yahoo Login na iOS i dodaj schematy niestandardowych adresów URL do Runnera (krok 1).
Android
Zanim zaczniesz, skonfiguruj Yahoo Login na Androida.
Nie zapomnij dodać odcisku cyfrowego SHA-1 swojej aplikacji.
Internet
Działa od razu po uruchomieniu.
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);
}
}
Używanie tokena dostępu OAuth
Za pomocą komponentu AuthProvider możesz pobrać token dostępu powiązany z dostawcą, wysyłając poniższe żą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: ``dart await FirebaseAuth.instance.signInAnonymously();
final appleProvider = AppleAuthProvider();
if (kIsWeb) { await FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);
// Możesz też użyć linkWithRedirect
} Other {
await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider);
}
// Twój anonimowy użytkownik został uaktualniony i możesz teraz korzystać z funkcji Zaloguj się przez Apple ``
Ponownie uwierzytelnij u dostawcy
Tego samego wzorca można używać z funkcją reauthenticateWithProvider
, która umożliwia pobieranie nowych danych logowania w przypadku poufnych operacji, które wymagają niedawnego logowania.
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