我正在玩FirebaseUI-Android并有一个关于在唯一标识用户时使用什么 ID 的问题。 FirebaseUI 管理身份验证权限并返回IdpResponse
目的。这可以是例如Facebook、Twitter、电话等等……非常感谢背后的每个人。
因为FirebaseUser.getUid()
当用户删除/重新创建他的帐户时可以更改,因此我不想将我的用户数据与FirebaseUser.getUid()
token.
将来,如果我决定让用户擦除那里的帐户,当用户回来时,uid 将发生变化,并且我的系统中该用户的所有用户历史记录都无法再访问。另外,将来如果我将系统迁移到某个地方,uid 就不会那么方便了,对吗?
现在我创建了这个包装器(下面的代码)来创建从内部数据推断出的唯一 IDIdpResponse
。真的不知道,但我认为这样做永远不会发生“id”冲突,除非有 Google2.0 例如Twitter2.0 :) 对的。同时,由于 id 不是 UUID,因此更容易揭穿系统中的错误。
这是处理用户 ID 问题的推荐方法吗?我真的需要一些关于此的反馈和陷阱警告。
@Override
public String getUserId() {
String userId;
FirebaseUser user = getInstance().getCurrentUser();
if (user.getEmail() != null)
// User sign in with E-Mail
userId = user.getEmail().replace(".", ",");
else if (user.getPhoneNumber() != null){
// User sign in with Phone
userId = user.getPhoneNumber();
}else
// User sign in with Twitter or Facebook
userId = user.getUid();
return userId;
}
最让我困扰的是 Twitter 或 Facebook,因为我仍然必须使用FirebaseUser.getUid()
。是个IdpResponse.getIdpToken()
对我们更好?
正如您在帖子中提到的,使用 uid 不是最好的选择。如果用户删除他的帐户并尝试创建另一个帐户,则另一个帐户uid
被生成。所以在这种情况下,他丢失了所有数据历史记录。
识别用户的最佳方法是使用email address
。该电子邮件地址是唯一的,易于使用,如果将来需要,可以链接Google account
with a Facebook account
并与Twitter account
,根据电子邮件地址,你就可以做id了。因为 Firebase 不接受.
密钥中的符号,我建议您对电子邮件地址进行编码,如下所示:
[电子邮件受保护]-> 姓名@电子邮件,com
正如您可能看到的,我更改了点符号.
昏迷,
。为了实现这一点,我建议您使用以下方法:
static String encodeUserEmail(String userEmail) {
return userEmail.replace(".", ",");
}
static String decodeUserEmail(String userEmail) {
return userEmail.replace(",", ".");
}
希望能帮助到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)