La autenticación social es un flujo de autenticación de varios pasos que le permite registrar a 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 mediante una ventana emergente o una redirección.
La mayor parte de la configuración ya está configurada cuando se utiliza el inicio de sesión de Google con Firebase; sin embargo, debe asegurarse de que la clave SHA1 de su máquina esté configurada para usar con Android. Puedes ver cómo generar la clave en la documentación de autenticación .
Asegúrese de que el proveedor de inicio de sesión "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 proveedores confiables de Firebase Authentications. Puedes encontrar 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 google_sign_in
.
Una vez instalada, 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 mediante su proyecto de Firebase. Por ejemplo:
Cree un proveedor de autenticación de Google, proporcionando cualquier alcance 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 solicitando al usuario que inicie sesión en su proyecto. Alternativamente, puedes 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
Puedes autenticar usuarios en tu juego de Android mediante el inicio de sesión de Play Games.
Androide
Sigue las instrucciones para la configuración de Google en Android y luego configura los servicios de Play Games con la información de tu aplicación Firebase .
Lo siguiente activará el flujo de inicio de sesión, creará una nueva credencial e iniciará sesión como 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);
}
Antes de comenzar, configure su aplicación para desarrolladores de Facebook y siga el proceso de configuración para habilitar el inicio de sesión con Facebook.
Asegúrese de que el proveedor de inicio de sesión "Facebook" esté habilitado en Firebase Console . con el ID de la aplicación de Facebook y el conjunto secreto.
iOS+ y Android
En 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 de 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 como 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 utilizando los detalles de la aplicación de Facebook proporcionados en Firebase console. Por ejemplo:
Cree un proveedor de Facebook, proporcionando cualquier alcance de permiso adicional que desee obtener del usuario.
Asegúrese de que el URI de redireccionamiento de OAuth desde 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 solicitando 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 capacidad "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);
}
}
Revocar tokens de autenticación de Apple
El inicio de sesión de Apple en las plataformas Apple devuelve un código de autorización que se puede utilizar para revocar el token de autenticación de Apple mediante la 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+
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 el inicio de sesión de Microsoft para Android .
No olvide agregar la huella digital SHA-1 de su aplicación.
Web
Antes de comenzar, configure el inicio de sesión de Microsoft 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 "Twitter" esté habilitado en Firebase Console con una clave API y un secreto API configurados. Asegúrese de que su URI de redireccionamiento de Firebase OAuth (por ejemplo, my-app-12345.firebaseapp.com/__/auth/handler) esté configurado 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 .
Es posible que también deba solicitar 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 Autenticar a su cliente para obtener detalles sobre cómo obtener la huella digital SHA-1 de su aplicación.
Web
Funciona desde el primer momento.
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 de 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 utilizando los detalles de la aplicación GitHub proporcionados en Firebase console. Asegúrese de que la URL de devolución de llamada en Firebase console se agregue como una URL de devolución de llamada en su aplicación GitHub en la consola de desarrollador.
Por ejemplo:
Cree un proveedor de GitHub y proporcione la credencial al método signInWithPopup
. Esto hará que aparezca una nueva ventana solicitando al usuario que inicie sesión en su aplicación 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 API y un secreto API configurados. También asegúrese de que su URI de redireccionamiento de Firebase OAuth (por ejemplo, my-app-12345.firebaseapp.com/__/auth/handler) esté configurado como un URI de redireccionamiento en la configuración de Yahoo Developer Network 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 desde el primer momento.
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);
}
}
Usando el token de acceso de OAuth
Al utilizar 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.signInAnonymfully();
final appleProvider = AppleAuthProvider();
if (kIsWeb) { espera FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);
// También puedes 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
Se puede usar el mismo patrón 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