La autenticación mediante redes sociales es un flujo de autenticación de varios pasos que te permite hacer que un usuario acceda a una cuenta o vincularlo con una existente.
Las plataformas nativas y los sitios web admiten la creación de una credencial que se puede pasar a los métodos
signInWithCredential
o linkWithCredential
. Como alternativa, en las plataformas web, puedes activar el proceso de autenticación mediante
una ventana emergente o un redireccionamiento.
La mayor parte de la configuración ya se establece cuando se usa el Acceso con Google en Firebase. Sin embargo, debes asegurarte de que la clave SHA1 de tu máquina esté configurada para usarla con Android. Puedes ver cómo generar la clave en la documentación de autenticación.
Asegúrate de que el proveedor de acceso de “Google” esté habilitado en Firebase console.
Si tu usuario accede 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 Authentication de proveedores de confianza. Puedes obtener más información al respecto aquí.
iOS+ y Android
En las plataformas nativas, se requiere una biblioteca de terceros para activar el flujo de autenticación.
Instala el complemento oficial google_sign_in
.
Una vez instalado, activa el flujo de acceso y crea 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 proporciona asistencia para manejar automáticamente el flujo de autenticación con tu proyecto de Firebase. Por ejemplo:
Crea un proveedor de autenticación de Google y proporciona cualquier alcance de permiso adicional que desees obtener del usuario:
GoogleAuthProvider googleProvider = GoogleAuthProvider();
googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
'login_hint': 'user@example.com'
});
Proporciona la credencial al método signInWithPopup
. Esto hará que aparezca una
ventana nueva en la que se le solicite al usuario que acceda a tu proyecto. Como alternativa, 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);
}
Google Play Juegos (solo para Android)
Asegúrate de que el proveedor de acceso de “Play Juegos” esté habilitado en Firebase console. Sigue estas instrucciones para configurar el proyecto de Play Juegos de Firebase.
Sigue estas instrucciones para configurar los Servicios de juego de Play. con la app de 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);
}
Antes de comenzar, configura tu app para desarrolladores de Facebook y sigue el proceso de configuración a fin de habilitar el acceso con Facebook.
Asegúrate de que el proveedor de acceso de “Facebook” esté habilitado en Firebase console con el ID y el secreto de la app 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.
Instala el complemento flutter_facebook_auth
.
Deberás seguir los pasos que se indican en la documentación del complemento a fin de asegurarte de que los SDK de Facebook para iOS y Android se hayan inicializado de forma correcta. Cuando se complete, activa el flujo de acceso, crea una credencial de Facebook y haz que el usuario acceda:
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 proporciona compatibilidad para controlar automáticamente el flujo de autenticación mediante los detalles de la aplicación de Facebook que se proporcionan en Firebase console. Por ejemplo:
Crea un proveedor de Facebook y proporciona cualquier alcance de permiso adicional que desees obtener del usuario.
Asegúrate de que el URI de redireccionamiento de OAuth de Firebase console se agregue como un URI de redireccionamiento de OAuth válido en tu app de Facebook.
FacebookAuthProvider facebookProvider = FacebookAuthProvider();
facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
'display': 'popup',
});
Proporciona la credencial al método signInWithPopup
. Esta acción hará que
aparezca una ventana nueva para que el usuario acceda a tu 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);
}
Apple
iOS+
Antes de comenzar, configura el acceso con Apple y habilita Apple como un proveedor de acceso.
Luego, asegúrate de que tus apps de Runner
tengan la función “Acceder con Apple”.
Android
Antes de comenzar, configura el acceso con Apple y habilita Apple como un proveedor de acceso.
Web
Antes de comenzar, configura el acceso con Apple y habilita Apple como un proveedor de acceso.
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 acceso a la plataforma de Apple
El acceso con Apple en plataformas iOS+ también se puede lograr con el siguiente método:
// 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);
Revocar tokens de autenticación de Apple
El acceso a Apple en plataformas de Apple muestra un código de autorización que se puede usar para revocar el token de autenticación de Apple con la API de 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!);
}
Apple Game Center (solo para Apple)
Asegúrate de que "Game Center" esté habilitado en Firebase console. Sigue estas instrucciones para la configuración del proyecto de Game Center de Firebase.
Deberás acceder con Game Center para que se pueda emitir una credencial de Game Center de Firebase y acceder con ella a través de Firebase. Aquí encontrarás algunas instrucciones sobre cómo se puede lograr eso.
iOS+
Future<void> _signInWithGameCenter() async {
final credential = GameCenterAuthProvider.credential();
await FirebaseAuth.instance
.signInWithCredential(credential);
}
Microsoft
iOS+
Antes de comenzar, configura el Acceso de Microsoft para iOS y agrega los esquemas de URL personalizados al ejecutor (paso 1).
Android
Antes de comenzar, configura el acceso de Microsoft para Android.
No olvides agregar la huella digital SHA-1 de tu app.
Web
Antes de comenzar, configura el acceso de Microsoft para la 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);
}
}
Asegúrate de que el proveedor de acceso de “Twitter” esté habilitado en Firebase console con una clave de API y un conjunto de secretos de la API. Asegúrate de que tu URI de redireccionamiento de OAuth de Firebase (p. ej., my-app-12345.firebaseapp.com/__/auth/handler) esté configurado como URL de devolución de llamada de autorización en la página de configuración de la app, en la configuración de tu app de Twitter.
Es posible que también debas solicitar un acceso a la API elevado según tu app.
iOS+
Debes configurar tu esquema de URL personalizada como se describe en el paso 1 de la guía de iOS.
Android
Si aún no has especificado la huella digital SHA-1 de tu app, hazlo desde la página de configuración de Firebase console. Consulta cómo autenticar tu cliente para obtener detalles sobre la obtención de la huella digital SHA-1 de tu app.
Web
Funciona de inmediato.
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úrate de haber configurado una app de OAuth desde la Configuración para desarrolladores de GitHub y de que el proveedor de acceso de “GitHub” esté habilitado en Firebase console con el ID y Secret de cliente configurados y con la URL de devolución de llamada establecida en la app de GitHub.
iOS+ y Android
En las plataformas nativas, debes agregar google-services.json
y GoogleService-Info.plist
.
En iOS, agrega el esquema de URL personalizado como se describe en la guía de iOS en el paso 1.
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 proporciona compatibilidad para controlar automáticamente el flujo de autenticación mediante los detalles de la aplicación de GitHub que se proporcionan en Firebase console. Asegúrate de que la URL de devolución de llamada de Firebase console se agregue como URL de devolución de llamada a tu aplicación de GitHub en su consola para desarrolladores.
Por ejemplo:
Crea un proveedor de GitHub y proporciona la credencial en el método signInWithPopup
. Esta acción hará que
aparezca una ventana nueva para que el usuario acceda a tu 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úrate de que el proveedor de acceso de “Yahoo” esté habilitado en Firebase console con una clave de API y un conjunto de secretos de la API. Además, asegúrate de que el URI de redireccionamiento de Firebase OAuth (p. ej., my-app-12345.firebaseapp.com/__/auth/handler) esté configurado como URI de redireccionamiento en la configuración de Yahoo Developer Network de tu app.
iOS+
Antes de comenzar, configura el Acceso de Yahoo para iOS y agrega los esquemas de URL personalizada al ejecutor (paso 1).
Android
Antes de comenzar, configura el acceso de Yahoo para Android.
No olvides agregar la huella digital SHA-1 de tu app.
Web
Funciona de inmediato.
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);
}
}
Usa el token de acceso de OAuth
Si usas un AuthProvider, puedes recuperar el token de acceso asociado con el proveedor mediante 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`
Vincula un proveedor de autenticación
Si deseas vincular un proveedor con un usuario actual, puedes usar el siguiente método: ```dart await FirebaseAuth.instance.signInAnonymously();
final appleProvider = AppleAuthProvider();
if (kIsWeb) { await FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);
// También puedes usar linkWithRedirect
} else {
await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider);
}
// Tu usuario anónimo ahora se actualizó y se puede conectar con el Acceso con Apple ```
Vuelve a autenticar con el proveedor
Se puede utilizar el mismo patrón con reauthenticateWithProvider
, que se puede usar a fin de recuperar
credenciales nuevas para operaciones sensibles que requieren un acceso 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