c# - 如何使用 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
您无法知道哪个是用于身份验证的。
在我看来,在主对象的某个字段中获取一些您上次登录时使用的信息非常基本。
解决方案
我认为没有任何方法可以找到用户上次从他们的个人资料登录的个人资料。
如果您需要此信息,则需要在用户登录时捕获它。例如,来自有关使用电子邮件/密码登录的文档:
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;
})
推荐阅读
- python-3.x - Flask 模板未呈现,并且不会插入到数据库中
- javascript - 如何在 Angular 8 项目中使用 Satellite.js
- python - 如何使用 print 在 python 中显示类实例
- python - 有没有办法解决 RecursionError:调用 Python 对象时超出最大递归深度?
- python - 从 csv 文件中读取数据,同时密切关注文件夹的更改
- python - 机器 epsilon 的倍数是什么意思?
- python - 如何将抓取的数据写入csv fromat?
- xml - 如何在 xml odoo 中的单个字段上应用多种格式?
- facebook - 来自 Facebook 帖子的 RSS 提要
- r - 从文件输入更新闪亮表