2017-06-14 120 views
1

我正在玩弄FirebaseUI-Android,并且对唯一标识用户时使用的ID有疑问。 FirebaseUI管理身份验证权并返回IdpResponse对象。这可以是例如脸书,推特,手机等等。这是感谢所有背后的人。自定义Firebase用户身份不使用Firebase用户uid

因为FirebaseUser.getUid()可以改变,当用户删除/重新创建他的帐户,因此我不想链接我的用户数据与FirebaseUser.getUid()令牌。

未来,如果我决定让用户在那里擦拭帐户,当用户返回时,用户的所有用户历史记录都将无法访问。同样在未来,如果我将我的系统迁移到某个地方,那么uid不会那么方便地拥有权利吗?

现在我创建了这个包装器(下面的代码)来创建一个从IdpResponse中的数据外推的唯一ID。真的不知道,但我想这样做,除非有Google 2.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()对我们更好吗?

回答

0

正如你在你的文章中提到的,使用uid不是最好的选择。如果用户删除其帐户并尝试创建另一个帐户,则会生成另一个uid。所以在这种情况下,他会损失所有数据历史记录。 识别用户的最好方法是使用email address。该电子邮件地址是独一无二的,易于使用,并且如果将来需要根据电子邮件地址将Google accountFacebook accountTwitter account关联起来,您将能够做到这一点。由于火力地堡不会在关键的接受.符号,我建议你编码的电子邮件地址是这样的:

[email protected] - >名@电子邮件,COM

正如你可能看到,我已将昏迷符号.更改为昏迷,。为了达到这个我重温你使用这种方法:

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

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

希望它有帮助。

+0

谢谢我在想同样的事情。 –

+0

所以,如果您认为我的回答对您有帮助,请考虑接受并给予+1。谢谢! –

相关问题