首页 > 解决方案 > 如何使用 Firebase 身份验证检索用于使用关联帐户登录的登录方法

问题描述

如果我有同一个用户 ID 的两个链接帐户,可以说基于 Facebook 和电子邮件。验证 FireBase 时会触发以下内容:

 // Track ID token changes.
    private void IdTokenChanged(object sender, System.EventArgs eventArgs)
    {
        Firebase.Auth.FirebaseAuth senderAuth = sender as Firebase.Auth.FirebaseAuth;
        if (senderAuth == auth && senderAuth.CurrentUser != null)// && !fetchingToken)
        {
            senderAuth.CurrentUser.TokenAsync(false).ContinueWith(
              task =>
              {
                  fetchingToken = true; 
                  UserLoginDetails.provideId = new List<Firebase.Auth.IUserInfo>(senderAuth.CurrentUser.ProviderData)[0].ProviderId;
                  UserLoginDetails.userId = senderAuth.CurrentUser.UserId;
                  UserLoginDetails.name = senderAuth.CurrentUser.DisplayName;
                 //DO MORE STUFF HERE
              }
        }
    }

如您所见,我可以获取用户信息,并使用ProviderData.

问题是,当从您那里获取主要 ProviderId 时,senderAuth.CurrentUser.ProviderId:您会得到“Firebase”,而ProviderData您无法知道哪个是用于身份验证的。

在我看来,在主对象的某个字段中获取一些您上次登录时使用的信息非常基本。

标签: c#firebaseunity3dfirebase-authentication

解决方案


我认为没有任何方法可以找到用户上次从他们的个人资料登录的个人资料。

如果您需要此信息,则需要在用户登录时捕获它。例如,来自有关使用电子邮件/密码登录的文档

auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
    return;
  }
  if (task.IsFaulted) {
    Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception);
    return;
  }

  Firebase.Auth.FirebaseUser newUser = task.Result;
  Debug.LogFormat("User signed in successfully: {0} ({1})",
      newUser.DisplayName, newUser.UserId);

  this.SignInMethod = "Password";
});

或者,如果您直接使用以下方式登录Credential

auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
  ...
  this.SignInMethod = credential.Provider;
})

推荐阅读