Descubre las novedades de Firebase en Google I/O 2022. Más información

Identidad federada e inicio de sesión social

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

La autenticación social es un flujo de autenticación de varios pasos que le permite iniciar sesión con un usuario en una cuenta o vincularlo con una existente.

Tanto las plataformas nativas como la web admiten la creación de una credencial que luego se puede pasar a los métodos signInWithCredential o linkWithCredential . Alternativamente, en las plataformas web, puede activar el proceso de autenticación a través de una ventana emergente o una redirección.

Google

La mayor parte de la configuración ya está configurada cuando usa el inicio de sesión de Google con Firebase, sin embargo, debe asegurarse de que la clave SHA1 de su máquina se haya configurado para usar con Android. Puede ver cómo generar la clave en la documentación de autenticación .

Asegúrese de que el proveedor de inicio de sesión de "Google" esté habilitado en Firebase Console .

Si su usuario inicia sesión con Google, después de haber registrado manualmente una cuenta, su proveedor de autenticación cambiará automáticamente a Google, debido al concepto de Firebase Authentications de proveedores confiables. Puede obtener más información sobre esto aquí .

iOS+ y Android

En plataformas nativas, se requiere una biblioteca de terceros para activar el flujo de autenticación.

Instale el complemento oficial de google_sign_in .

Una vez instalado, active el flujo de inicio de sesión y cree una nueva credencial:

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

En la web, el SDK de Firebase brinda soporte para manejar automáticamente el flujo de autenticación usando su proyecto de Firebase. Por ejemplo:

Cree un proveedor de autenticación de Google, proporcionando cualquier ámbito de permiso adicional que desee obtener del usuario:

GoogleAuthProvider googleProvider = GoogleAuthProvider();

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

Proporcione la credencial al método signInWithPopup . Esto hará que aparezca una nueva ventana que le pedirá al usuario que inicie sesión en su proyecto. Alternativamente, puede usar signInWithRedirect para mantener el proceso de autenticación en la misma ventana.

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

Juegos de Google Play

Puede autenticar a los usuarios en su juego de Android mediante el inicio de sesión de Play Games.

Androide

Siga las instrucciones para la configuración de Google en Android, luego configure los servicios de Play Juegos con la información de su aplicación Firebase .

Lo siguiente activará el flujo de inicio de sesión, creará una nueva credencial e iniciará la sesión del usuario:

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

Antes de comenzar, configure su aplicación de desarrollador de Facebook y siga el proceso de configuración para habilitar el inicio de sesión de Facebook.

Asegúrese de que el proveedor de inicio de sesión de "Facebook" esté habilitado en Firebase Console . con el conjunto de ID y secreto de la aplicación de Facebook.

iOS+ y Android

En las plataformas nativas, se requiere una biblioteca de terceros para instalar el SDK de Facebook y activar el flujo de autenticación.

Instale el complemento flutter_facebook_auth .

Deberá seguir los pasos en la documentación del complemento para asegurarse de que los SDK de Facebook de Android e iOS se hayan inicializado correctamente. Una vez completado, active el flujo de inicio de sesión, cree una credencial de Facebook e inicie sesión con el usuario:

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

En la web, el SDK de Firebase brinda soporte para manejar automáticamente el flujo de autenticación usando los detalles de la aplicación de Facebook proporcionados en la consola de Firebase. Por ejemplo:

Cree un proveedor de Facebook, proporcionando cualquier ámbito de permiso adicional que desee obtener del usuario.

Asegúrese de que el URI de redireccionamiento de OAuth de Firebase console se agregue como un URI de redireccionamiento de OAuth válido en su aplicación de Facebook.

FacebookAuthProvider facebookProvider = FacebookAuthProvider();

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

Proporcione la credencial al método signInWithPopup . Esto hará que aparezca una nueva ventana que le pedirá al usuario que inicie sesión en su aplicación de 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);
}

Manzana

iOS+

Antes de comenzar, configure Iniciar sesión con Apple y habilite Apple como proveedor de inicio de sesión .

A continuación, asegúrese de que sus aplicaciones Runner tengan la función "Iniciar sesión con Apple".

Androide

Antes de comenzar, configure Iniciar sesión con Apple y habilite Apple como proveedor de inicio de sesión .

Web

Antes de comenzar, configure Iniciar sesión con Apple y habilite Apple como proveedor de inicio de sesión .

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

microsoft

iOS+

Antes de comenzar, configure Microsoft Login para iOS y agregue los esquemas de URL personalizados a su Runner (paso 1) .

Androide

Antes de comenzar, configure Microsoft Login para Android .

No olvide agregar la huella digital SHA-1 de su aplicación.

Web

Antes de comenzar, configure Microsoft Login para 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);
  }
}

Gorjeo

Asegúrese de que el proveedor de inicio de sesión de "Twitter" esté habilitado en Firebase Console con una clave de API y un secreto de API establecidos. Asegúrese de que su URI de redirección de OAuth de Firebase (por ejemplo, my-app-12345.firebaseapp.com/__/auth/handler) esté configurada como su URL de devolución de llamada de autorización en la página de configuración de su aplicación en la configuración de su aplicación de Twitter .

También es posible que deba solicitar un acceso API elevado según su aplicación .

iOS+

Debe configurar su esquema de URL personalizado como se describe en el paso 1 de la guía de iOS .

Androide

Si aún no ha especificado la huella digital SHA-1 de su aplicación, hágalo desde la página Configuración de Firebase console. Consulte Autenticación de su cliente para obtener detalles sobre cómo obtener la huella digital SHA-1 de su aplicación.

Web

Funciona fuera de la caja.

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

Asegúrese de haber configurado una aplicación OAuth desde su configuración de desarrollador de GitHub y que el proveedor de inicio de sesión "GitHub" esté habilitado en Firebase Console con el ID de cliente y el secreto configurados, con la URL de devolución de llamada configurada en la aplicación GitHub.

iOS+ y Android

Para plataformas nativas, debe agregar google-services.json y GoogleService-Info.plist .

Para iOS, agregue el esquema de URL personalizado como se describe en el paso 1 de la guía de iOS .

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

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

Web

En la web, el SDK de GitHub brinda soporte para manejar automáticamente el flujo de autenticación mediante los detalles de la aplicación de GitHub proporcionados en la consola de Firebase. Asegúrese de que la URL de devolución de llamada en la consola de Firebase se agregue como una URL de devolución de llamada en su aplicación de GitHub en la consola del desarrollador.

Por ejemplo:

Cree un proveedor de GitHub y proporcione la credencial al método signInWithPopup . Esto hará que aparezca una nueva ventana que le pedirá al usuario que inicie sesión en su aplicación de 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

Asegúrese de que el proveedor de inicio de sesión "Yahoo" esté habilitado en Firebase Console con una clave de API y un secreto de API establecidos. También asegúrese de que su URI de redireccionamiento de OAuth de Firebase (por ejemplo, my-app-12345.firebaseapp.com/__/auth/handler) esté configurado como un URI de redireccionamiento en la configuración de la red de desarrolladores de Yahoo de su aplicación.

iOS+

Antes de comenzar, configure Yahoo Login para iOS y agregue los esquemas de URL personalizados a su Runner (paso 1) .

Androide

Antes de comenzar, configure Yahoo Login para Android .

No olvide agregar la huella digital SHA-1 de su aplicación.

Web

Funciona fuera de la caja.

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

Uso del token de acceso de OAuth

Al usar un AuthProvider, puede recuperar el token de acceso asociado con el proveedor realizando la siguiente solicitud.

final appleProvider = AppleAuthProvider();

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

// You can send requests with the `accessToken`

Vincular un proveedor de autenticación

Si desea vincular un proveedor a un usuario actual, puede utilizar el siguiente método: ```dart await FirebaseAuth.instance.signInAnonymously();

AppleProvider final = AppleAuthProvider();

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

// También puede usar linkWithRedirect } else { await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider); }

// Su usuario anónimo ahora está actualizado para poder conectarse con Iniciar sesión con Apple ```

Volver a autenticarse con el proveedor

El mismo patrón se puede usar con reauthenticateWithProvider , que se puede usar para recuperar credenciales nuevas para operaciones confidenciales que requieren un inicio de sesión reciente.

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