Uwierzytelnianie społecznościowe to wieloetapowy proces uwierzytelniania, który umożliwia zalogowanie użytkownika do konta lub połączenie go z już istniejącym.
Zarówno platformy natywne, jak i obsługa sieci Web, tworząc poświadczenia, które można następnie przekazać do metod signInWithCredential
lub linkWithCredential
. Alternatywnie na platformach internetowych możesz uruchomić proces uwierzytelniania za pomocą wyskakującego okienka lub przekierowania.
Większość konfiguracji jest już skonfigurowana podczas korzystania z logowania przez Google w Firebase, jednak musisz upewnić się, że klucz SHA1 na komputerze został skonfigurowany do użytku z Androidem. Możesz zobaczyć, jak wygenerować klucz w dokumentacji instalacyjnej .
Upewnij się, że dostawca logowania „Google” jest włączony w konsoli Firebase .
Jeśli Twój użytkownik zaloguje się w Google, po ręcznym zarejestrowaniu konta, jego dostawca uwierzytelniania automatycznie zmieni się na Google ze względu na koncepcję zaufanych dostawców Firebase Authentication. Więcej na ten temat dowiesz się tutaj .
iOS+ i Android
Na platformach natywnych do wyzwolenia przepływu uwierzytelniania wymagana jest biblioteka innej firmy.
Zainstaluj oficjalną wtyczkę google_sign_in
.
Po zainstalowaniu uruchom proces logowania i utwórz nowe poświadczenia:
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 Firebase SDK zapewnia obsługę automatycznej obsługi przepływu uwierzytelniania przy użyciu projektu Firebase. Na przykład:
Utwórz dostawcę uwierzytelniania Google, podając dowolny dodatkowy zakres uprawnień , który 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 poświadczenia do metody signInWithPopup
. Spowoduje to pojawienie się nowego okna z monitem o zalogowanie się do Twojego projektu. Alternatywnie możesz użyć signInWithRedirect
, aby utrzymać 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);
}
Zanim zaczniesz, skonfiguruj swoją aplikację Facebook Developer App i postępuj zgodnie z procesem konfiguracji, aby włączyć logowanie na Facebooku.
Upewnij się, że dostawca logowania „Facebook” jest włączony w konsoli Firebase . z zestawem identyfikatora i klucza tajnego aplikacji Facebook.
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
.
Musisz wykonać kroki opisane w dokumentacji wtyczki, aby upewnić się, że oba pakiety SDK dla Androida i iOS dla Facebooka zostały poprawnie zainicjowane. Po zakończeniu uruchom proces logowania, utwórz poświadczenia do Facebooka i zaloguj się:
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 Firebase SDK zapewnia obsługę automatycznej obsługi przepływu uwierzytelniania przy użyciu szczegółów aplikacji Facebook dostępnych w konsoli Firebase. Na przykład:
Utwórz dostawcę Facebooka, zapewniając dodatkowy zakres uprawnień , który chcesz uzyskać od użytkownika.
Upewnij się, że identyfikator URI przekierowania OAuth z konsoli Firebase został dodany jako prawidłowy identyfikator URI przekierowania OAuth w Twojej aplikacji na Facebooku.
FacebookAuthProvider facebookProvider = FacebookAuthProvider();
facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
'display': 'popup',
});
Podaj poświadczenia do metody signInWithPopup
. Spowoduje to pojawienie się nowego okna z monitem o zalogowanie się do aplikacji Facebooka:
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);
}
Jabłko
iOS+ i Android
Zanim zaczniesz, skonfiguruj funkcję Sign In with Apple i włącz Apple jako dostawcę logowania .
Następnie upewnij się, że Twoje aplikacje Runner
mają funkcję „Zaloguj się przez Apple”.
Zainstaluj wtyczkę sign_in_with_apple
, a także pakiet crypto
:
dependencies:
sign_in_with_apple: ^3.0.0
crypto: ^3.0.1
import 'dart:convert';
import 'dart:math';
import 'package:crypto/crypto.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:sign_in_with_apple/sign_in_with_apple.dart';
/// Generates a cryptographically secure random nonce, to be included in a
/// credential request.
String generateNonce([int length = 32]) {
const charset =
'0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._';
final random = Random.secure();
return List.generate(length, (_) => charset[random.nextInt(charset.length)])
.join();
}
/// Returns the sha256 hash of [input] in hex notation.
String sha256ofString(String input) {
final bytes = utf8.encode(input);
final digest = sha256.convert(bytes);
return digest.toString();
}
Future<UserCredential> signInWithApple() async {
// To prevent replay attacks with the credential returned from Apple, we
// include a nonce in the credential request. When signing in with
// Firebase, the nonce in the id token returned by Apple, is expected to
// match the sha256 hash of `rawNonce`.
final rawNonce = generateNonce();
final nonce = sha256ofString(rawNonce);
// Request credential for the currently signed in Apple account.
final appleCredential = await SignInWithApple.getAppleIDCredential(
scopes: [
AppleIDAuthorizationScopes.email,
AppleIDAuthorizationScopes.fullName,
],
nonce: nonce,
);
// Create an `OAuthCredential` from the credential returned by Apple.
final oauthCredential = OAuthProvider("apple.com").credential(
idToken: appleCredential.identityToken,
rawNonce: rawNonce,
);
// Sign in the user with Firebase. If the nonce we generated earlier does
// not match the nonce in `appleCredential.identityToken`, sign in will fail.
return await FirebaseAuth.instance.signInWithCredential(oauthCredential);
}
Sieć
Zanim zaczniesz, skonfiguruj funkcję Sign In with Apple i włącz Apple jako dostawcę logowania .
import 'package:firebase_auth/firebase_auth.dart';
Future<UserCredential> signInWithApple() async {
// Create and configure an OAuthProvider for Sign In with Apple.
final provider = OAuthProvider("apple.com")
..addScope('email')
..addScope('name');
// Sign in the user with Firebase.
return await FirebaseAuth.instance.signInWithPopup(provider);
}
Alternatywą jest użycie signInWithRedirect
. W takim przypadku przeglądarka odejdzie od Twojej aplikacji i będziesz musiał użyć getRedirectResult
, aby sprawdzić wyniki uwierzytelniania podczas uruchamiania aplikacji.
Świergot
Upewnij się, że dostawca logowania na Twitterze jest włączony w konsoli Firebase za pomocą zestawu kluczy API i tajnych kluczy API.
iOS+ i Android
Na platformach natywnych do zainstalowania pakietu Twitter SDK i uruchomienia procesu uwierzytelniania wymagana jest biblioteka innej firmy.
Zainstaluj wtyczkę twitter_login
:
dependencies:
twitter_login: ^4.0.1
Pamiętaj, aby dokładnie przejść przez kroki konfiguracji twitter_login
i zarejestrować adres URL wywołania zwrotnego w portalu dla programistów Twittera z pasującym schematem adresu URL
import 'package:twitter_login/twitter_login.dart';
Future<UserCredential> signInWithTwitter() async {
// Create a TwitterLogin instance
final twitterLogin = new TwitterLogin(
apiKey: '<your consumer key>',
apiSecretKey:' <your consumer secret>',
redirectURI: '<your_scheme>://'
);
// Trigger the sign-in flow
final authResult = await twitterLogin.login();
// Create a credential from the access token
final twitterAuthCredential = TwitterAuthProvider.credential(
accessToken: authResult.authToken!,
secret: authResult.authTokenSecret!,
);
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithCredential(twitterAuthCredential);
}
Sieć
W Internecie zestaw Twitter SDK zapewnia obsługę automatycznej obsługi przepływu uwierzytelniania przy użyciu szczegółów aplikacji Twittera dostępnych w konsoli Firebase. Upewnij się, że adres URL wywołania zwrotnego w konsoli Firebase został dodany jako adres URL wywołania zwrotnego w aplikacji Twittera w konsoli programisty.
Na przykład:
Utwórz dostawcę Twittera i podaj poświadczenia do metody signInWithPopup
. Spowoduje to pojawienie się nowego okna z monitem o zalogowanie się do aplikacji Twittera:
Future<UserCredential> signInWithTwitter() async {
// Create a new provider
TwitterAuthProvider twitterProvider = TwitterAuthProvider();
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithPopup(twitterProvider);
// Or use signInWithRedirect
// return await FirebaseAuth.instance.signInWithRedirect(twitterProvider);
}
GitHub
Upewnij się, że masz skonfigurowaną aplikację OAuth w ustawieniach programisty GitHub i że dostawca logowania „GitHub” jest włączony w konsoli Firebase z ustawionym identyfikatorem klienta i kluczem tajnym, a adres URL wywołania zwrotnego jest ustawiony w aplikacji GitHub.
iOS+ i Android
Na platformach natywnych do zainstalowania zestawu SDK GitHub i wyzwolenia przepływu uwierzytelniania wymagana jest biblioteka innej firmy.
Zainstaluj wtyczkę github_sign_in
:
dependencies:
github_sign_in: ^0.0.5-dev.4
Musisz wypełnić instancję GitHubSignIn
swoim identyfikatorem klienta GitHub, kluczem tajnym klienta GitHub, a także adresem URL przekierowania (adres URL wywołania zwrotnego Firebase). Po zakończeniu wyzwalania procesu logowania utwórz poświadczenia GitHub i zaloguj się:
import 'package:github_sign_in/github_sign_in.dart';
Future<UserCredential> signInWithGitHub() async {
// Create a GitHubSignIn instance
final GitHubSignIn gitHubSignIn = GitHubSignIn(
clientId: clientId,
clientSecret: clientSecret,
redirectUrl: 'https://my-project.firebaseapp.com/__/auth/handler');
// Trigger the sign-in flow
final result = await gitHubSignIn.signIn(context);
// Create a credential from the access token
final githubAuthCredential = GithubAuthProvider.credential(result.token);
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithCredential(githubAuthCredential);
}
Sieć
W Internecie zestaw SDK GitHub zapewnia obsługę automatycznej obsługi przepływu uwierzytelniania przy użyciu szczegółów aplikacji GitHub dostępnych w konsoli Firebase. Upewnij się, że adres URL wywołania zwrotnego w konsoli Firebase został dodany jako adres URL wywołania zwrotnego w aplikacji GitHub w konsoli programisty.
Na przykład:
Utwórz dostawcę GitHub i podaj poświadczenia do metody signInWithPopup
. Spowoduje to pojawienie się nowego okna z monitem o zalogowanie się do 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);
}