Puede permitir que sus usuarios se autentiquen con Firebase utilizando proveedores de OAuth como Yahoo integrando el inicio de sesión OAuth genérico basado en web en su aplicación utilizando el SDK de Firebase para llevar a cabo el flujo de inicio de sesión de un extremo a otro.
Antes de que empieces
Para iniciar sesión como usuario con cuentas de Yahoo, primero debes habilitar Yahoo como proveedor de inicio de sesión para tu proyecto de Firebase:
- En Firebase console , abre la sección Auth .
- En la pestaña Método de inicio de sesión , habilite el proveedor de Yahoo .
- Agregue el ID de cliente y el Secreto de cliente desde la consola de desarrollador de ese proveedor a la configuración del proveedor:
Para registrar un cliente Yahoo OAuth, siga la documentación para desarrolladores de Yahoo sobre cómo registrar una aplicación web con Yahoo .
Asegúrese de seleccionar los dos permisos de la API de OpenID Connect:
profile
yemail
.- Al registrar aplicaciones con estos proveedores, asegúrese de registrar el dominio
*.firebaseapp.com
para su proyecto como dominio de redireccionamiento para su aplicación.
- Clic en Guardar .
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.
Maneja el flujo de inicio de sesión con el SDK de Firebase
Si está creando una aplicación para Android, la forma más sencilla de autenticar a sus usuarios con Firebase utilizando sus cuentas de Yahoo es manejar todo el flujo de inicio de sesión con el SDK de Firebase para Android.
Para manejar el flujo de inicio de sesión con el SDK de Firebase para Android, siga estos pasos:
Construya una instancia de OAuthProvider utilizando su Builder con el ID de proveedor yahoo.com .
Kotlin+KTX
val provider = OAuthProvider.newBuilder("yahoo.com")
Java
OAuthProvider.Builder provider = OAuthProvider.newBuilder("yahoo.com");
Opcional : especifique parámetros OAuth personalizados adicionales que desee enviar con la solicitud OAuth.
Kotlin+KTX
// Prompt user to re-authenticate to Yahoo. provider.addCustomParameter("prompt", "login") // Localize to French. provider.addCustomParameter("language", "fr")
Java
// Prompt user to re-authenticate to Yahoo. provider.addCustomParameter("prompt", "login"); // Localize to French. provider.addCustomParameter("language", "fr");
Para conocer los parámetros que admite Yahoo, consulte la documentación de Yahoo OAuth . Ten en cuenta que no puedes pasar los parámetros requeridos por Firebase con
setCustomParameters()
. Estos parámetros son client_id , redirigir_uri , tipo_respuesta , alcance y estado .Opcional : especifique alcances de OAuth 2.0 adicionales más allá
profile
yemail
que desea solicitar al proveedor de autenticación. Si su aplicación requiere acceso a datos privados de usuario de las API de Yahoo, deberá solicitar permisos para las API de Yahoo en Permisos de API en la consola de desarrollador de Yahoo. Los alcances de OAuth solicitados deben coincidir exactamente con los preconfigurados en los permisos API de la aplicación. Por ejemplo, si se solicita acceso de lectura/escritura a los contactos del usuario y se preconfigura en los permisos API de la aplicación, se debe pasarsdct-w
en lugar del alcance OAuth de solo lecturasdct-r
. De lo contrario, el flujo fallará y se mostrará un error al usuario final.Kotlin+KTX
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. provider.scopes = listOf("mail-r", "sdct-w")
Java
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. List<String> scopes = new ArrayList<String>() { { // Request access to Yahoo Mail API. add("mail-r"); // This must be preconfigured in the app's API permissions. add("sdct-w"); } }; provider.setScopes(scopes);
Para obtener más información, consulte la documentación de ámbitos de Yahoo .Autentíquese con Firebase utilizando el objeto proveedor de OAuth. Tenga en cuenta que, a diferencia de otras operaciones de FirebaseAuth, esto tomará el control de su interfaz de usuario al abrir una pestaña personalizada de Chrome . Como resultado, no haga referencia a su actividad en los OnSuccessListeners y OnFailureListeners que adjunte, ya que se desconectarán inmediatamente cuando la operación inicie la interfaz de usuario.
Primero debes verificar si ya has recibido una respuesta. Iniciar sesión a través de este método coloca su Actividad en segundo plano, lo que significa que el sistema puede reclamarla durante el flujo de inicio de sesión. Para asegurarse de que no haga que el usuario vuelva a intentarlo si esto sucede, debe verificar si ya hay un resultado presente.
Para comprobar si hay un resultado pendiente, llame
getPendingAuthResult
:Kotlin+KTX
val pendingResultTask = firebaseAuth.pendingAuthResult if (pendingResultTask != null) { // There's something already here! Finish the sign-in for your user. pendingResultTask .addOnSuccessListener { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } .addOnFailureListener { // Handle failure. } } else { // There's no pending result so you need to start the sign-in flow. // See below. }
Java
Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult(); if (pendingResultTask != null) { // There's something already here! Finish the sign-in for your user. pendingResultTask .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } }); } else { // There's no pending result so you need to start the sign-in flow. // See below. }
Para iniciar el flujo de inicio de sesión, llame a
startActivityForSignInWithProvider
:Kotlin+KTX
firebaseAuth .startActivityForSignInWithProvider(activity, provider.build()) .addOnSuccessListener { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } .addOnFailureListener { // Handle failure. }
Java
firebaseAuth .startActivityForSignInWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
Una vez completado correctamente, el token de acceso de OAuth asociado con el proveedor se puede recuperar del objeto
OAuthCredential
devuelto.Con el token de acceso de OAuth, puede llamar a la API de Yahoo .
Donde
YAHOO_USER_UID
es el ID del usuario de Yahoo que se puede analizar desde el campofirebaseAuth.getCurrentUser().getProviderData().get(0).getUid()
o desdeauthResult.getAdditionalUserInfo().getProfile()
.Si bien los ejemplos anteriores se centran en los flujos de inicio de sesión, también tiene la posibilidad de vincular un proveedor de Yahoo a un usuario existente mediante
startActivityForLinkWithProvider
. Por ejemplo, puede vincular varios proveedores al mismo usuario, permitiéndoles iniciar sesión con cualquiera de ellos.Kotlin+KTX
// The user is already signed-in. val firebaseUser = firebaseAuth.currentUser!! firebaseUser .startActivityForLinkWithProvider(activity, provider.build()) .addOnSuccessListener { // Provider credential is linked to the current user. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // authResult.getCredential().getAccessToken(). // The OAuth secret can be retrieved by calling: // authResult.getCredential().getSecret(). } .addOnFailureListener { // Handle failure. }
Java
// The user is already signed-in. FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); firebaseUser .startActivityForLinkWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // Provider credential is linked to the current user. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // authResult.getCredential().getAccessToken(). // The OAuth secret can be retrieved by calling: // authResult.getCredential().getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
Se puede usar el mismo patrón con
startActivityForReauthenticateWithProvider
, que se puede usar para recuperar credenciales nuevas para operaciones confidenciales que requieren un inicio de sesión reciente.Kotlin+KTX
// The user is already signed-in. val firebaseUser = firebaseAuth.currentUser!! firebaseUser .startActivityForReauthenticateWithProvider(activity, provider.build()) .addOnSuccessListener { // User is re-authenticated with fresh tokens and // should be able to perform sensitive operations // like account deletion and email or password // update. } .addOnFailureListener { // Handle failure. }
Java
// The user is already signed-in. FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); firebaseUser .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is re-authenticated with fresh tokens and // should be able to perform sensitive operations // like account deletion and email or password // update. } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
Próximos pasos
Después de que un usuario inicia sesión por primera vez, se crea una nueva cuenta de usuario y se vincula a las credenciales (es decir, el nombre de usuario y la contraseña, el número de teléfono o la información del proveedor de autenticación) con las que el usuario inició sesión. Esta nueva cuenta se almacena como parte de su proyecto de Firebase y se puede usar para identificar a un usuario en cada aplicación de su proyecto, independientemente de cómo inicie sesión el usuario.
En tus aplicaciones, puedes obtener la información básica del perfil del usuario desde el objeto
FirebaseUser
. Consulte Administrar usuarios .En las reglas de seguridad de Firebase Realtime Database y Cloud Storage, puede obtener el ID de usuario único del usuario que inició sesión a partir de la variable
auth
y usarlo para controlar a qué datos puede acceder un usuario.
Puede permitir que los usuarios inicien sesión en su aplicación utilizando múltiples proveedores de autenticación vinculando las credenciales del proveedor de autenticación a una cuenta de usuario existente.
Para cerrar la sesión de un usuario, llame signOut
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();