Identità federata e accesso sociale

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.

Google

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);
}

Facebook

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);
  }
}

Twitter

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