L'autenticazione social è un flusso di autenticazione in più fasi che ti consente di far accedere un utente a un account o a un link con uno esistente.
Sia le piattaforme native sia il web supportano la creazione di una credenziale che può essere passata a signInWithCredential
o linkWithCredential
. In alternativa sulle piattaforme web, puoi attivare il processo di autenticazione tramite
un popup o un reindirizzamento.
La maggior parte della configurazione è già impostata quando si utilizza Accedi con Google con Firebase, ma è necessario verificare che La chiave SHA1 è stata configurata per essere utilizzata con Android. Puoi scoprire come generare la chiave nella documentazione sull'autenticazione.
Assicurati che l'opzione "Google" il provider di accesso è abilitato nella Console Firebase.
Se l'utente accede con Google, dopo aver già registrato manualmente un account, il suo provider di autenticazione esegue automaticamente a Google, grazie al concetto di provider di fiducia di Firebase Authentications. Puoi scoprire di più su qui.
iOS+ e Android
Sulle piattaforme native, è necessaria una libreria di terze parti per attivare il flusso di autenticazione.
Installa il plug-in ufficiale di google_sign_in
.
Dopo l'installazione, 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);
}
Web
Sul web, l'SDK Firebase fornisce il supporto per la gestione automatica del flusso di autenticazione utilizzando il progetto Firebase. Ad esempio:
Creare un provider di autenticazione Google, fornendo ulteriori ambito di autorizzazione che vuoi ottenere dall'utente:
GoogleAuthProvider googleProvider = GoogleAuthProvider();
googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
'login_hint': '[email protected]'
});
Fornisci la credenziale al metodo signInWithPopup
. Verrà attivata una nuova
che richiede all'utente di accedere al tuo progetto. In alternativa, puoi utilizzare signInWithRedirect
per mantenere
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': '[email protected]'
});
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithPopup(googleProvider);
// Or use signInWithRedirect
// return await FirebaseAuth.instance.signInWithRedirect(googleProvider);
}
Google Play Giochi (solo Android)
Assicurati che il provider di accesso "Google Play Giochi" sia abilitato nella console Firebase. Segui queste istruzioni per configurare un progetto Firebase per Play Giochi.
Segui queste istruzioni per configurare i servizi Play Giochi con la tua app 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);
}
Prima di iniziare, configura la tua Facebook Developer App e segui la procedura di configurazione per abilitare Facebook Login.
Assicurati che "Facebook" il provider di accesso è abilitato nella Console Firebase. con l'ID app di Facebook e il secret impostati.
iOS+ e Android
Sulle piattaforme native, è necessaria una libreria di terze parti per installare l'SDK di Facebook e per attivare il flusso di autenticazione.
Installa il plug-in flutter_facebook_auth
.
Dovrai seguire i passaggi nella documentazione relativa ai plug-in per assicurarti che sia Android sia Gli SDK iOS per Facebook sono stati inizializzati in modo corretto. Al termine, 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);
}
Web
Sul web, l'SDK Firebase fornisce il supporto per la gestione automatica del flusso di autenticazione utilizzando il metodo Dettagli dell'applicazione Facebook forniti nella console Firebase. Ad esempio:
Creare un provider Facebook, fornendo ulteriori ambito di autorizzazione che vuoi ottenere dall'utente.
Assicurati che l'URI di reindirizzamento OAuth della Console Firebase sia stato aggiunto come URI di reindirizzamento OAuth valido nell'app Facebook.
FacebookAuthProvider facebookProvider = FacebookAuthProvider();
facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
'display': 'popup',
});
Fornisci la credenziale al metodo signInWithPopup
. Verrà attivata una nuova
che richiede all'utente di accedere all'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);
}
Apple
iOS+
Prima di iniziare, configura la funzionalità Accedi con Apple e attiva Apple come provider di accesso.
Dopodiché, assicurati che nelle tue app Runner
sia presente l'opzione "Accedi con Apple" funzionalità.
Android
Prima di iniziare, configura Accedi con Apple e abilita Apple come provider di accesso.
Web
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);
}
}
Solo accesso alla piattaforma Apple
L'accesso Apple su piattaforme iOS+ può essere ottenuto anche con il seguente metodo:
// 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);
Revoca token di autenticazione Apple
L'accesso con 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!);
}
Game Center di Apple (solo Apple)
Assicurati che il "Centro giochi" il provider di accesso è abilitato nella Console Firebase. Segui queste istruzioni per configurare i progetti Firebase del Centro giochi.
Per ottenere una credenziale del Centro giochi Firebase e accedere tramite Firebase, dovrai accedere a Game Center. Ecco alcune istruzioni su come raggiungere questo obiettivo.
iOS+
Future<void> _signInWithGameCenter() async {
final credential = GameCenterAuthProvider.credential();
await FirebaseAuth.instance
.signInWithCredential(credential);
}
Microsoft
iOS+
Prima di iniziare, configura Microsoft Login per iOS e aggiungi gli schemi URL personalizzati al tuo Runner (passaggio 1).
Android
Prima di iniziare, configura Microsoft Login per Android.
Non dimenticare di aggiungere l'impronta SHA-1 dell'app.
Web
Prima di iniziare, configura Microsoft Login per il 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 "Twitter" il provider di accesso è abilitato nella Console Firebase con una chiave API e un API secret impostati. Assicurati che l'URI di reindirizzamento OAuth di Firebase (ad es. my-app-12345.firebaseapp.com/__/auth/handler) sia impostato come URL di callback per l'autorizzazione nella pagina delle impostazioni dell'app nella configurazione dell'app Twitter.
Potresti anche dover richiedere un accesso API elevato, a seconda dell'app.
iOS+
Devi configurare lo schema URL personalizzato come descritto nel passaggio 1 della guida per iOS.
Android
Se non hai ancora specificato l'impronta SHA-1 dell'app, puoi farlo dalla pagina Impostazioni della console Firebase. Fai riferimento all'articolo Autenticazione del client per informazioni dettagliate su come ottenere l'impronta SHA-1 della tua app.
Web
Funziona subito.
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 di GitHub e che "GitHub" il provider di accesso è abilitato nella Console Firebase con l'ID client e il secret, con l'URL di callback impostato nell'app GitHub.
iOS e versioni successive e Android
Per le piattaforme native, devi aggiungere google-services.json
e GoogleService-Info.plist
.
Per iOS, aggiungi lo schema URL personalizzato come descritto nella guida per iOS al passaggio 1.
Future<UserCredential> signInWithGitHub() async {
// Create a new provider
GithubAuthProvider githubProvider = GithubAuthProvider();
return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}
Web
Sul web, l'SDK GitHub fornisce il supporto per la gestione automatica del flusso di autenticazione utilizzando il metodo Dettagli dell'applicazione GitHub forniti nella console Firebase. Assicurati di aggiungere l'URL di callback nella Console Firebase come URL di callback nella tua applicazione GitHub sulla console per gli sviluppatori.
Ad esempio:
Crea un provider GitHub e fornisci la credenziale al metodo signInWithPopup
. Verrà attivata una nuova
che chiede all'utente di accedere alla tua 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 nella Console Firebase con una chiave API e un segreto API impostati. Assicurati inoltre che l'URI di reindirizzamento OAuth di Firebase (ad es. my-app-12345.firebaseapp.com/__/auth/handler) sia impostato come URI di reindirizzamento nella configurazione della rete di sviluppatori Yahoo della tua app.
iOS+
Prima di iniziare, configura l'accesso Yahoo per iOS e aggiungi gli schemi URL personalizzati al tuo Runner (passaggio 1).
Android
Prima di iniziare, configura Yahoo Login per Android.
Non dimenticare di aggiungere l'impronta SHA-1 dell'app.
Web
Funziona subito.
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);
}
}
Utilizzo del token di accesso OAuth
Utilizzando un provider AuthProvider, puoi recuperare il token di accesso associato al provider inviando 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 vuoi collegare un provider a un utente corrente, puoi utilizzare il seguente metodo: ```dart await FirebaseAuth.instance.signInAnonymously();
final appleProvider = AppleAuthProvider()
if (kIsWeb) { await FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);
// Puoi utilizzare anche linkWithRedirect
} else {
await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider);
}
// Il tuo account utente anonimo è stato sottoposto all'upgrade per poterti connettere con Accedi con Apple '``
Ripeti l'autenticazione con il provider
È possibile usare lo stesso pattern con reauthenticateWithProvider
per recuperare nuovi elementi
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