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

标签 android firebase firebase-authentication

我正在玩弄 FirebaseUI-Android并且对唯一标识用户时使用什么 ID 有疑问。 FirebaseUI 管理身份验证权限并返回 IdpResponse 对象。这可以是例如Facebook、Twitter、Phone 等等。非常感谢所有支持这一切的人。

因为 FirebaseUser.getUid() 可以在用户删除/重新创建他的帐户时更改,所以我不想将我的用户数据与 FirebaseUser.getUid() token 。

在未来,如果我决定让用户删除那里的帐户,当用户回来时 uid 将会改变,并且我的系统中该用户的所有用户历史都无法再访问了。此外,如果将来我将系统迁移到某个地方,uid 将不会那么方便,对吗?

现在我创建了这个包装器(下面的代码)来创建一个从 IdpResponse 中的数据推断出的唯一 ID。真的不知道,但我认为这样做永远不会发生“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。所以在这种情况下,他丢失了所有数据历史记录。 识别用户的最佳方式是使用电子邮件地址。电子邮件地址是唯一的,易于使用,如果将来需要,可以将 Google 帐户Facebook 帐户Twitter 帐户 链接起来>,根据电子邮件地址,您将能够做 id。因为 Firebase 不接受 key 中的 . 符号,所以我建议您像这样对电子邮件地址进行编码:

name@email.com -> name@email,com

正如您可能看到的,我已经将点符号 . 更改为逗号 ,。为了实现这一点,我建议您使用以下方法:

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

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

希望对您有所帮助。

关于android - 不使用 Firebase 用户 uid 的自定义 Firebase 用户身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44540920/

相关文章:

Android Firebase 远程配置初始提取不返回值

javascript - Firebase 使用电子邮件和密码创建用户并将数据放入数据库

java - 在 Cloud Endpoints 和 API Explorer 上对用户进行身份验证(使用 Firebase 和 Google 身份验证)

android - 自定义警报对话框滚动问题

android - 如何在 Android 工作线程上对任务进行排队?

java - 如何在Android应用程序中获取设备存储中的所有视频

android - Firebase 云消息未收到通知

Node.js 将图像上传到 firebase 存储

android - 添加 compile 'com.google.firebase:firebase-database:9.6.0' 的新方法是什么?

android - Android主页按钮监听器