Autenticar usando Yahoo y Unity

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. Dado que este flujo requiere el uso de los SDK de Firebase basados ​​en teléfonos, solo es compatible con las plataformas Android y Apple.

Antes de que empieces

Antes de poder utilizar Firebase Authentication , debes:

  • Registre su proyecto de Unity y configúrelo para usar Firebase.

    • Si tu proyecto de Unity ya usa Firebase, entonces ya está registrado y configurado para Firebase.

    • Si no tiene un proyecto de Unity, puede descargar una aplicación de muestra .

  • Agregue el SDK de Firebase Unity (específicamente, FirebaseAuth.unitypackage ) a su proyecto de Unity.

Tenga en cuenta que agregar Firebase a su proyecto de Unity implica tareas tanto en Firebase console como en su proyecto de Unity abierto (por ejemplo, descarga archivos de configuración de Firebase desde la consola y luego los mueve a su proyecto de Unity).

Accede a la clase Firebase.Auth.FirebaseAuth

La clase FirebaseAuth es la puerta de entrada para todas las llamadas API. Se puede acceder a él a través de FirebaseAuth.DefaultInstance .
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Maneja el flujo de inicio de sesión con el SDK de Firebase

Para manejar el flujo de inicio de sesión con el SDK de Firebase, sigue estos pasos:

  1. Construya una instancia de FederatedOAuthProviderData configurada con el ID de proveedor apropiado para Yahoo.

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    providerData.ProviderId = Firebase.Auth.YahooAuthProvider.ProviderId;
    
  2. Opcional : especifique parámetros OAuth personalizados adicionales que desee enviar con la solicitud OAuth.

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Prompt user to re-authenticate to Yahoo.
    providerData.CustomParameters.Add("prompt", "login");
    
    // Localize to French.
    providerData.CustomParameters.Add("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 custom_parameters() . Estos parámetros son client_id , redirigir_uri , tipo_respuesta , alcance y estado .

  3. Opcional : especifique alcances de OAuth 2.0 adicionales más allá profile y email 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 pasar sdct-w en lugar del alcance OAuth de solo lectura sdct-r . De lo contrario, el flujo fallará y se mostrará un error al usuario final.

    providerData.Scopes = new List<string>();
    
    // Request access to Yahoo Mail API.
    providerData.Scopes.Add("mail-r");
    // This must be preconfigured in the app's API permissions.
    providerData.Scopes.Add("sdct-w");
    

    Para obtener más información, consulte la documentación de ámbitos de Yahoo .

  4. Una vez que se hayan configurado los datos de su proveedor, utilícelos para crear un FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider =
        new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. Autentíquese con Firebase utilizando el objeto del proveedor de autenticación. Tenga en cuenta que, a diferencia de otras operaciones de FirebaseAuth, esto tomará el control de su interfaz de usuario al mostrar una vista web en la que el usuario puede ingresar sus credenciales.

    Para iniciar el flujo de inicio de sesión, llame a SignInAndRetrieveDataWithCredentialAsync :

<<../_includes/_sign_in_with_provider_unity.md>>>

  1. 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 LinkWithProviderAsync . Por ejemplo, puede vincular varios proveedores al mismo usuario, permitiéndoles iniciar sesión con cualquiera de ellos.

    user.LinkWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("LinkWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError("LinkWithProviderAsync encountered an error: "
              + task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User linked successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  2. Se puede usar el mismo patrón con ReauthenticateWithProviderAsync , que se puede usar para recuperar credenciales nuevas para operaciones confidenciales que requieren un inicio de sesión reciente.

    user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("ReauthenticateWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError(
            "ReauthenticateWithProviderAsync encountered an error: " +
                task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User reauthenticated successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    

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 Firebase.Auth.FirebaseUser :

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
    
  • 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 a SignOut() :

auth.SignOut();