L'autenticazione social è un flusso di autenticazione in più passaggi, che consente di accedere a un utente in un account o collegarlo a uno esistente.
Sia le piattaforme native che il supporto Web creano una credenziale che può quindi essere passata ai metodi signInWithCredential
o linkWithCredential
. In alternativa sulle piattaforme web è possibile attivare il processo di autenticazione tramite popup o reindirizzamento.
La maggior parte delle configurazioni sono già configurate quando utilizzi l'accesso a Google con Firebase, tuttavia devi assicurarti che la chiave SHA1 del tuo computer sia stata configurata per l'uso con Android. Puoi vedere come generare la chiave nella documentazione di autenticazione .
Assicurati che il provider di accesso "Google" sia abilitato sulla console Firebase .
Se il tuo utente accede con Google, dopo aver già registrato manualmente un account, il suo fornitore di autenticazione cambierà automaticamente in Google, a causa del concetto di provider affidabili di Firebase Authentication. Puoi trovare ulteriori informazioni al riguardo qui .
iOS+ e Android
Sulle piattaforme native è necessaria una libreria di terze parti per attivare il flusso di autenticazione.
Installa il plugin ufficiale google_sign_in
.
Una volta installato, attiva il flusso di accesso e crea una nuova credenziale:
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);
}
ragnatela
Sul Web, l'SDK Firebase fornisce supporto per la gestione automatica del flusso di autenticazione utilizzando il tuo progetto Firebase. Per esempio:
Crea un provider di autenticazione Google, fornendo qualsiasi ambito di autorizzazione aggiuntivo che desideri ottenere dall'utente:
GoogleAuthProvider googleProvider = GoogleAuthProvider();
googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
'login_hint': 'user@example.com'
});
Fornire le credenziali al metodo signInWithPopup
. Ciò attiverà la visualizzazione di una nuova finestra che richiede all'utente di accedere al tuo progetto. In alternativa puoi utilizzare signInWithRedirect
per mantenere il processo di autenticazione nella stessa finestra.
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);
}
Giochi di Google Play
Puoi autenticare gli utenti nel tuo gioco Android utilizzando l'accesso a Play Games.
Androide
Segui le istruzioni per la configurazione di Google su Android, quindi configura i servizi Play Games con le informazioni dell'app Firebase .
Quanto segue attiverà il flusso di accesso, creerà una nuova credenziale e farà accedere l'utente:
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);
}
Prima di iniziare, configura la tua app per sviluppatori Facebook e segui la procedura di configurazione per abilitare l'accesso a Facebook.
Assicurati che il provider di accesso "Facebook" sia abilitato sulla console Firebase . con l'ID dell'app Facebook e il set segreto.
iOS+ e Android
Sulle piattaforme native, è necessaria una libreria di terze parti per installare l'SDK di Facebook e attivare il flusso di autenticazione.
Installa il plugin flutter_facebook_auth
.
Dovrai seguire i passaggi nella documentazione del plugin per assicurarti che sia l'SDK di Facebook per Android che quello per iOS siano stati inizializzati correttamente. Una volta completato, attiva il flusso di accesso, crea una credenziale Facebook e accedi all'utente:
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);
}
ragnatela
Sul Web, l'SDK di Firebase fornisce supporto per la gestione automatica del flusso di autenticazione utilizzando i dettagli dell'applicazione Facebook forniti nella console Firebase. Per esempio:
Crea un provider Facebook, fornendo qualsiasi ambito di autorizzazione aggiuntivo che desideri ottenere dall'utente.
Assicurati che l'URI di reindirizzamento OAuth dalla console Firebase venga aggiunto come URI di reindirizzamento OAuth valido nella tua app Facebook.
FacebookAuthProvider facebookProvider = FacebookAuthProvider();
facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
'display': 'popup',
});
Fornire le credenziali al metodo signInWithPopup
. Ciò attiverà la visualizzazione di una nuova finestra che richiede all'utente di accedere alla tua applicazione 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);
}
Mela
iOS+
Prima di iniziare, configura Accedi con Apple e abilita Apple come provider di accesso .
Successivamente, assicurati che le tue app Runner
dispongano della funzionalità "Accedi con Apple".
Androide
Prima di iniziare, configura Accedi con Apple e abilita Apple come provider di accesso .
ragnatela
Prima di iniziare, configura Accedi con Apple e abilita Apple come provider di accesso .
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);
}
}
Revoca i token di autenticazione Apple
L'accesso Apple sulle piattaforme Apple restituisce un codice di autorizzazione che può essere utilizzato per revocare il token di autenticazione Apple utilizzando l'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+
Prima di iniziare , configura Microsoft Login per iOS e aggiungi gli schemi URL personalizzati al tuo Runner (passaggio 1) .
Androide
Prima di iniziare configura Microsoft Login per Android .
Non dimenticare di aggiungere l'impronta digitale SHA-1 della tua app.
ragnatela
Prima di iniziare a configurare Microsoft Login per 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);
}
}
Assicurati che il provider di accesso "Twitter" sia abilitato sulla console Firebase con una chiave API e un set di API Secret. Assicurati che l'URI di reindirizzamento OAuth Firebase (ad esempio my-app-12345.firebaseapp.com/__/auth/handler) sia impostato come URL di richiamata di autorizzazione nella pagina delle impostazioni dell'app nel file di configurazione dell'app Twitter .
Potrebbe anche essere necessario richiedere l'accesso API elevato a seconda dell'app .
iOS+
Devi configurare il tuo schema URL personalizzato come descritto nel passaggio 1 della guida iOS .
Androide
Se non hai ancora specificato l'impronta digitale SHA-1 della tua app, fallo dalla pagina Impostazioni della console Firebase. Fai riferimento a Autenticazione del tuo client per i dettagli su come ottenere l'impronta digitale SHA-1 della tua app.
ragnatela
Funziona fuori dagli schemi.
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
Assicurati di aver configurato un'app OAuth dalle Impostazioni sviluppatore GitHub e che il provider di accesso "GitHub" sia abilitato sulla console Firebase con l'ID client e il segreto impostati, con l'URL di richiamata impostato nell'app GitHub.
iOS+ e Android
Per le piattaforme native, devi aggiungere google-services.json
e GoogleService-Info.plist
.
Per iOS, aggiungi lo schema URL personalizzato come descritto nel passaggio 1 della guida iOS .
Future<UserCredential> signInWithGitHub() async {
// Create a new provider
GithubAuthProvider githubProvider = GithubAuthProvider();
return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}
ragnatela
Sul Web, l'SDK GitHub fornisce supporto per la gestione automatica del flusso di autenticazione utilizzando i dettagli dell'applicazione GitHub forniti nella console Firebase. Assicurati che l'URL di richiamata nella console Firebase venga aggiunto come URL di richiamata nell'applicazione GitHub sulla console per sviluppatori.
Per esempio:
Crea un provider GitHub e fornisci le credenziali al metodo signInWithPopup
. Ciò attiverà la visualizzazione di una nuova finestra che richiede all'utente di accedere all'applicazione 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
Assicurati che il provider di accesso "Yahoo" sia abilitato sulla console Firebase con un set di chiave API e API Secret. Assicurati inoltre che l'URI di reindirizzamento OAuth Firebase (ad esempio my-app-12345.firebaseapp.com/__/auth/handler) sia impostato come URI di reindirizzamento nella configurazione Yahoo Developer Network della tua app.
iOS+
Prima di iniziare, configura Yahoo Login per iOS e aggiungi gli schemi URL personalizzati al tuo Runner (passaggio 1) .
Androide
Prima di iniziare, configura Yahoo Login per Android .
Non dimenticare di aggiungere l'impronta digitale SHA-1 della tua app.
ragnatela
Funziona fuori dagli schemi.
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);
}
}
Utilizzando il token di accesso OAuth
Utilizzando un AuthProvider, puoi recuperare il token di accesso associato al provider effettuando la seguente richiesta.
final appleProvider = AppleAuthProvider();
final user = await FirebaseAuth.instance.signInWithProvider(appleProvider);
final accessToken = user.credential?.accessToken;
// You can send requests with the `accessToken`
Collegamento di un provider di autenticazione
Se desideri collegare un provider a un utente corrente, puoi utilizzare il seguente metodo: ```dart attendono FirebaseAuth.instance.signInAnonymously();
final appleProvider = AppleAuthProvider();
if (kIsWeb) { attendono FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);
// Puoi anche utilizzare linkWithRedirect
} else { attendono FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider); }
// Il tuo utente anonimo è ora aggiornato per potersi connettere con Accedi con Apple ```
Riautenticarsi con il provider
Lo stesso modello può essere utilizzato con reauthenticateWithProvider
che può essere utilizzato per recuperare nuove credenziali per operazioni sensibili che richiedono un accesso recente.
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