不使用Firebase用户的自定义Firebase用户身份uid

时间:2017-06-14 09:37:06

标签: android firebase firebase-authentication

我正在玩FirebaseUI-Android,并对唯一识别用户时使用的ID有疑问。 FirebaseUI管理了身份验证权限并返回IdpResponse对象。这可以是例如Facebook,Twitter,手机等等。感谢所有人背后的这一点。

因为当用户删除/重新创建其帐户时FirebaseUser.getUid()可能会发生变化,因此我不想将我的用户数据与FirebaseUser.getUid()令牌相关联。

将来,如果我决定让用户擦拭帐户,当用户返回时uid将会改变,并且我的系统中该用户的所有用户历史记录都不再可用。此外,如果我将系统迁移到某个地方,那么uid就不会那么方便了吗?

现在我创建了这个包装器(下面的代码)来创建一个从IdpResponse内的数据推断出来的唯一ID。 Dunno真的,但我想这样做,除非有Google2.0,否则永远不会发生“id”碰撞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()对我们来说更好吗?

1 个答案:

答案 0 :(得分:1)

正如您在帖子中提到的,使用uid不是最好的选择。如果用户删除了他的帐户并尝试创建其他帐户,则会生成另一个uid。所以在这种情况下,他会丢失所有数据历史记录。 识别用户的最佳方法是使用email address。电子邮件地址是独一无二的,易于使用,如果将来想要将Google accountFacebook accountTwitter account相关联,根据电子邮件地址,您将成为能够做id。由于Firebase不接受密钥中的.符号,因此我建议您对电子邮件地址进行编码,如下所示:

  

name@email.com - >名@电子邮件,玉米

正如您可能看到的那样,我已使用昏迷.更改了点符号,。为了实现这一点,我使用这种方法重新启动你:

static String encodeUserEmail(String userEmail) {
    return userEmail.replace(".", ",");
}

static String decodeUserEmail(String userEmail) {
    return userEmail.replace(",", ".");
}

希望它有所帮助。