Identité fédérée et amp; connexion sociale

L'authentification sociale est un flux d'authentification en plusieurs étapes, vous permettant de connecter un utilisateur à un compte ou de le lier à un compte existant.

Les plates-formes natives et le Web prennent en charge la création d'informations d'identification qui peuvent ensuite être transmises aux méthodes signInWithCredential ou linkWithCredential . Alternativement, sur les plateformes Web, vous pouvez déclencher le processus d'authentification via une fenêtre contextuelle ou une redirection.

Google

La plupart des configurations sont déjà configurées lors de l'utilisation de Google Sign-In avec Firebase. Cependant, vous devez vous assurer que la clé SHA1 de votre ordinateur a été configurée pour être utilisée avec Android. Vous pouvez voir comment générer la clé dans la documentation d'authentification .

Assurez-vous que le fournisseur de connexion « Google » est activé sur la console Firebase .

Si votre utilisateur se connecte avec Google, après avoir déjà enregistré manuellement un compte, son fournisseur d'authentification deviendra automatiquement Google, en raison du concept de fournisseurs de confiance Firebase Authentications. Vous pouvez en savoir plus à ce sujet ici .

iOS+ et Android

Sur les plateformes natives, une bibliothèque tierce est requise pour déclencher le flux d'authentification.

Installez le plugin officiel google_sign_in .

Une fois installé, déclenchez le flux de connexion et créez un nouvel identifiant :

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

la toile

Sur le Web, le SDK Firebase prend en charge la gestion automatique du flux d'authentification à l'aide de votre projet Firebase. Par exemple:

Créez un fournisseur d'authentification Google, en fournissant toute étendue d'autorisation supplémentaire que vous souhaitez obtenir de l'utilisateur :

GoogleAuthProvider googleProvider = GoogleAuthProvider();

googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
  'login_hint': 'user@example.com'
});

Fournissez les informations d’identification à la méthode signInWithPopup . Cela déclenchera l'apparition d'une nouvelle fenêtre invitant l'utilisateur à se connecter à votre projet. Vous pouvez également utiliser signInWithRedirect pour conserver le processus d'authentification dans la même fenêtre.

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

Jeux Google Play

Vous pouvez authentifier les utilisateurs de votre jeu Android à l'aide de la connexion à Play Games.

Android

Suivez les instructions de configuration de Google sur Android, puis configurez les services Play Games avec les informations de votre application Firebase .

Les éléments suivants déclencheront le flux de connexion, créeront un nouvel identifiant et connecteront l'utilisateur :

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

Avant de commencer, configurez votre application de développeur Facebook et suivez le processus de configuration pour activer la connexion Facebook.

Assurez-vous que le fournisseur de connexion « Facebook » est activé sur la console Firebase . avec l'identifiant de l'application Facebook et l'ensemble secret.

iOS+ et Android

Sur les plateformes natives, une bibliothèque tierce est requise pour installer le SDK Facebook et déclencher le flux d'authentification.

Installez le plugin flutter_facebook_auth .

Vous devrez suivre les étapes de la documentation du plugin pour vous assurer que les SDK Facebook Android et iOS ont été correctement initialisés. Une fois terminé, déclenchez le flux de connexion, créez un identifiant Facebook et connectez l'utilisateur :

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

la toile

Sur le Web, le SDK Firebase prend en charge la gestion automatique du flux d'authentification à l'aide des détails de l'application Facebook fournis sur la console Firebase. Par exemple:

Créez un fournisseur Facebook, en fournissant toute étendue d'autorisation supplémentaire que vous souhaitez obtenir de l'utilisateur.

Assurez-vous que l'URI de redirection OAuth de la console Firebase est ajouté en tant qu'URI de redirection OAuth valide dans votre application Facebook.

FacebookAuthProvider facebookProvider = FacebookAuthProvider();

facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
  'display': 'popup',
});

Fournissez les informations d’identification à la méthode signInWithPopup . Cela déclenchera l'apparition d'une nouvelle fenêtre invitant l'utilisateur à se connecter à votre application 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);
}

Pomme

iOS+

Avant de commencer, configurez la connexion avec Apple et activez Apple en tant que fournisseur de connexion .

Ensuite, assurez-vous que vos applications Runner disposent de la fonctionnalité « Se connecter avec Apple ».

Android

Avant de commencer, configurez la connexion avec Apple et activez Apple en tant que fournisseur de connexion .

la toile

Avant de commencer, configurez la connexion avec Apple et activez Apple en tant que fournisseur de connexion .

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

Révoquer les jetons d'authentification Apple

La connexion Apple sur les plates-formes Apple renvoie un code d'autorisation qui peut être utilisé pour révoquer le jeton d'authentification Apple à l'aide de 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+

Avant de commencer , configurez la connexion Microsoft pour iOS et ajoutez les schémas d'URL personnalisés à votre Runner (étape 1) .

Android

Avant de commencer , configurez la connexion Microsoft pour Android .

N'oubliez pas d'ajouter l'empreinte digitale SHA-1 de votre application.

la toile

Avant de commencer , configurez la connexion Microsoft pour le 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

Assurez-vous que le fournisseur de connexion « Twitter » est activé sur la console Firebase avec un ensemble de clés API et de secrets API. Assurez-vous que votre URI de redirection Firebase OAuth (par exemple my-app-12345.firebaseapp.com/__/auth/handler) est défini comme URL de rappel d'autorisation dans la page des paramètres de votre application sur la configuration de votre application Twitter .

Vous devrez peut-être également demander un accès élevé à l'API en fonction de votre application .

iOS+

Vous devez configurer votre schéma d'URL personnalisé comme décrit dans l'étape 1 du guide iOS .

Android

Si vous n'avez pas encore spécifié l'empreinte digitale SHA-1 de votre application, faites-le depuis la page Paramètres de la console Firebase. Reportez-vous à Authentification de votre client pour plus de détails sur la façon d'obtenir l'empreinte digitale SHA-1 de votre application.

la toile

Fonctionne hors de la boîte.

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

Assurez-vous d'avoir configuré une application OAuth à partir de vos paramètres de développeur GitHub et que le fournisseur de connexion « GitHub » est activé sur la console Firebase avec l'ID client et le secret définis, avec l'URL de rappel définie dans l'application GitHub.

iOS+ et Android

Pour les plates-formes natives, vous devez ajouter google-services.json et GoogleService-Info.plist .

Pour iOS, ajoutez le schéma d'URL personnalisé comme décrit dans l'étape 1 du guide iOS .

Future<UserCredential> signInWithGitHub() async {
  // Create a new provider
  GithubAuthProvider githubProvider = GithubAuthProvider();

  return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}

la toile

Sur le Web, le SDK GitHub prend en charge la gestion automatique du flux d'authentification à l'aide des détails de l'application GitHub fournis sur la console Firebase. Assurez-vous que l'URL de rappel dans la console Firebase est ajoutée en tant qu'URL de rappel dans votre application GitHub sur la console du développeur.

Par exemple:

Créez un fournisseur GitHub et fournissez les informations d'identification à la méthode signInWithPopup . Cela déclenchera l'apparition d'une nouvelle fenêtre invitant l'utilisateur à se connecter à votre application 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

Assurez-vous que le fournisseur de connexion « Yahoo » est activé sur la console Firebase avec un ensemble de clés API et de secrets API. Assurez-vous également que votre URI de redirection Firebase OAuth (par exemple my-app-12345.firebaseapp.com/__/auth/handler) est défini comme URI de redirection dans la configuration Yahoo Developer Network de votre application.

iOS+

Avant de commencer, configurez Yahoo Login pour iOS et ajoutez les schémas d'URL personnalisés à votre Runner (étape 1) .

Android

Avant de commencer, configurez Yahoo Login pour Android .

N'oubliez pas d'ajouter l'empreinte digitale SHA-1 de votre application.

la toile

Fonctionne hors de la boîte.

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

Utiliser le jeton d'accès OAuth

En utilisant un AuthProvider, vous pouvez récupérer le jeton d'accès associé au fournisseur en effectuant la requête suivante.

final appleProvider = AppleAuthProvider();

final user = await FirebaseAuth.instance.signInWithProvider(appleProvider);
final accessToken = user.credential?.accessToken;

// You can send requests with the `accessToken`

Lier un fournisseur d'authentification

Si vous souhaitez lier un fournisseur à un utilisateur actuel, vous pouvez utiliser la méthode suivante : ```dart wait FirebaseAuth.instance.signInAnonymously();

final appleProvider = AppleAuthProvider();

if (kIsWeb) { wait FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);

// Vous pouvez également utiliser linkWithRedirect } else { wait FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider); }

// Votre utilisateur anonyme est maintenant mis à niveau pour pouvoir vous connecter avec Connectez-vous avec Apple ```

Réauthentifier auprès du fournisseur

Le même modèle peut être utilisé avec reauthenticateWithProvider qui peut être utilisé pour récupérer de nouvelles informations d'identification pour les opérations sensibles nécessitant une connexion récente.

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