Uwierzytelnianie przez media społecznościowe to proces uwierzytelniania wieloetapowego, który umożliwia logowanie użytkownika na koncie lub jego łączenie z istniejącym kontem.
Zarówno platformy natywne, jak i internetowe obsługują tworzenie danych logowania, które można następnie przekazać do metod signInWithCredential
lub 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 Google z Firebase, ale musisz się upewnić, że klucz SHA1 Twojego komputera jest skonfigurowany do użycia z Androidem. Informacje o generowaniu klucza znajdziesz w dokumentacji uwierzytelniania.
Upewnij się, że dostawca logowania „Google” jest włączony w konsoli Firebase.
Jeśli użytkownik zaloguje się za pomocą Google, po ręcznym zarejestrowaniu konta jego dostawca uwierzytelniania zostanie automatycznie zmieniony na Google ze względu na koncepcję zaufanych dostawców uwierzytelniania w Firebase Authentication. Więcej informacji na ten temat znajdziesz tutaj.
iOS+ i Android
Na platformach natywnych do wywołania procesu uwierzytelniania wymagana jest biblioteka zewnętrzna.
Zainstaluj oficjalną wtyczkę google_sign_in
.
Po zainstalowaniu aplikacji 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);
}
Sieć
W internecie pakiet SDK Firebase umożliwia automatyczne przetwarzanie procesu 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 do metody signInWithPopup
. Wyświetli się nowe okno, w którym użytkownik będzie mógł zalogować się w Twoim projekcie. Możesz też użyć signInWithRedirect
, aby proces uwierzytelniania odbywał się 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 Androida)
Upewnij się, że w konsoli Firebase włączony jest dostawca logowania „Gry Play”. Postępuj zgodnie z tymi instrukcjami, aby skonfigurować projekt Firebase w Google Play Games.
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 dewelopera Facebooka i wykonaj proces konfiguracji, aby włączyć logowanie przez Facebooka.
Upewnij się, że dostawca logowania „Facebook” jest włączony w Konsoli Firebase z ustawionym identyfikatorem i kluczem tajnym aplikacji Facebook.
iOS+ i Android
Na platformach natywnych do zainstalowania pakietu SDK Facebooka i wywołania procesu uwierzytelniania wymagana jest biblioteka innej firmy.
Zainstaluj wtyczkę flutter_facebook_auth
.
Aby sprawdzić, czy pakiety SDK Facebooka na Androida i iOS zostały prawidłowo zainicjowane, wykonaj czynności opisane w dokumentacji wtyczki. Po zakończeniu procesu uruchom 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 internecie pakiet SDK Firebase umożliwia automatyczne przetwarzanie procesu uwierzytelniania za pomocą danych aplikacji Facebooka podanych w konsoli Firebase. Przykład:
Utwórz dostawcę Facebooka, podając dodatkowe uprawnienia, których chcesz otrzymać od użytkownika.
Upewnij się, że identyfikator URI przekierowania OAuth z konsoli Firebase 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 do metody signInWithPopup
. Wyświetli 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 logowanie przez Apple i włącz Apple jako dostawcę logowania.
Następnie sprawdź, czy aplikacje Runner
mają funkcję „Zaloguj się przez Apple”.
Android
Zanim zaczniesz, skonfiguruj logowanie przez Apple i włącz Apple jako dostawcę logowania.
Sieć
Zanim zaczniesz, skonfiguruj logowanie 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
Zalogowanie się w Apple na platformach iOS+ jest też możliwe za pomocą tej metody:
// 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żnia tokenów uwierzytelniających Apple
Logowanie Apple na platformach Apple zwraca kod autoryzacji, którego można użyć do odwołania 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 w konsoli Firebase włączony jest logowanie za pomocą usługi „Game Center”. Postępuj zgodnie z tymi instrukcjami dotyczącymi konfigurowania projektu Firebase w Game Center.
Zanim zaczniesz korzystać z uprawnień Firebase Game Center, musisz się zalogować w usłudze 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 iOS i dodaj niestandardowe schematy adresów URL do swojego Runnera (krok 1).
Android
Zanim zaczniesz, skonfiguruj logowanie Microsoft na Androida.
Nie zapomnij dodać odcisku cyfrowego SHA-1 aplikacji.
Sieć
Zanim zaczniesz, skonfiguruj logowanie Microsoft dla sieci 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);
}
}
Upewnij się, że dostawca logowania „Twitter” jest włączony w konsoli Firebase z ustawionym kluczem API i kluczem tajnym 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 Twitter.
W zależności od aplikacji może też być konieczne przesłanie prośby o rozszerzenie dostępu do interfejsu API.
iOS+
Musisz skonfigurować schemat niestandardowego adresu URL zgodnie z opisem w kroku 1 przewodnika po iOS.
Android
Jeśli nie masz jeszcze podanego odcisku palca SHA-1 aplikacji, zrób to na stronie Ustawienia w konsoli Firebase. Szczegółowe informacje o pobieraniu odcisku cyfrowego SHA-1 aplikacji znajdziesz w artykule Uwierzytelnianie klienta.
Sieć
Gotowe do użycia.
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 skonfigurowano aplikację OAuth w ustawieniach dewelopera GitHuba, a także że w konsoli Firebase włączono dostawcę logowania „GitHub” z ustawionymi identyfikatorem klienta i kluczem tajnym oraz z 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 niestandardowy schemat adresu URL zgodnie z instrukcjami podanymi w kroku 1 w przewodniku na temat iOS.
Future<UserCredential> signInWithGitHub() async {
// Create a new provider
GithubAuthProvider githubProvider = GithubAuthProvider();
return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}
Sieć
W internecie pakiet SDK GitHuba umożliwia automatyczne przetwarzanie procesu uwierzytelniania za pomocą danych aplikacji GitHub podanych w Konsoli Firebase. Upewnij się, że URL wywołania zwrotnego w konsoli Firebase został dodany jako URL wywołania zwrotnego w aplikacji GitHub w konsoli dla deweloperów.
Przykład:
Utwórz dostawcę GitHub i podaj dane logowania do metody signInWithPopup
. Spowoduje to wyświetlenie nowego okna, w którym użytkownik zostanie poproszony 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
Upewnij się, że dostawca logowania „Yahoo” jest włączony w konsoli Firebase z ustawionym kluczem API i kluczem tajnym 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 aplikacji w Yahoo Developer Network.
iOS+
Zanim zaczniesz, skonfiguruj logowanie Yahoo na iOS i dodaj niestandardowe schematy adresów URL do swojego Runnera (krok 1).
Android
Zanim zaczniesz, skonfiguruj logowanie Yahoo na urządzeniu z Androidem.
Nie zapomnij dodać odcisku cyfrowego SHA-1 aplikacji.
Sieć
Gotowe do użycia.
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
Za pomocą klasy 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 obecnym 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
Tego samego schematu można używać w przypadku funkcji reauthenticateWithProvider
, która umożliwia pobieranie nowych danych logowania na potrzeby operacji narażonych na wyciek danych, które wymagają 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