java - 为什么 firebase 用户 token 会发生变化?

标签 java android firebase firebase-authentication

当用户在我的 android 应用程序中使用 firebase 注册时,会生成一个 FirebaseUser 对象,我会从中检索用户 token ,以将其保存为我的 google 云端点后端中每个用户的唯一标识符。

我使用了一个在用户注册时调用的身份验证状态监听器:

mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {
                mUserId = user.getToken(true).toString();
                SignUpAboutFragment signUpAboutFragment = new SignUpAboutFragment();
                FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                ft.replace(R.id.sign_up_fragment_container, signUpAboutFragment, SIGN_UP_ABOUT_FRAGMENT_TAG);
                ft.addToBackStack(null);
                ft.commit();
            }
        }
};

然后使用字段 mUserId 将配置文件保存到 google 数据存储区中:

mPresenter.saveUserData(firstName, lastName, birthday, mUserId, this, MainActivity.class);

在不同的 Activity 中,我还希望使用当前用户 token 来调用我的端点 api:

//Different activity to the above.
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // Using getToken as recommended in the firebase docs.
    mUserId = user.getToken(true).toString();
}

当我在 2 个 Activity 中记录两个 mUserId 字段时,我发现它们是不同的。

为什么 mUserId 会发生变化?如何从我的应用中的任何位置检索当前用户的相同 token ?

最佳答案

Token其实就是一个标识用户连接的唯一id。因此,每次重新启动连接时,都会生成另一个 token 。如果你想为每个用户使用一个唯一的标识符,你应该得到它的 uid。像这样:

mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {
                mUserId = user.getUid();
                SignUpAboutFragment signUpAboutFragment = new SignUpAboutFragment();
                FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                ft.replace(R.id.sign_up_fragment_container, signUpAboutFragment, SIGN_UP_ABOUT_FRAGMENT_TAG);
                ft.addToBackStack(null);
                ft.commit();
            }
        }
};

您的其他 Activity 也会发生同样的情况:

//Different activity to the above.
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // Using getUid() which stays constant
    mUserId = user.getUid();
}

关于java - 为什么 firebase 用户 token 会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38333192/

相关文章:

java - Android Cam 致命异常文件 URI 暴露

android - 推送通知需要很长时间才能到达

ios - Firebase 查询(在 swift 中)确定数据库中是否已存在用户名

javascript - 如何在 htlm 和 java 脚本中使用从 firebase 数据库检索的纬度和经度在 map 上显示标记

java - 没有 fragment 的Facebook android sdk登录按钮

java - 如何将 .java 文件添加到 MonoDroid 项目

java - 如何将 2 个命令注册为 1 个

JAVA - 它是 java.util.Calendar 类中的错误还是什么?

javascript - 创建 promise 回调

java - 提交后是否禁止 begin() 同一事务(事务重用)?