为什么firebase用户令牌会更改?

时间:2016-07-12 15:30:45

标签: java android firebase firebase-authentication

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

我使用auth状态监听器,在用户注册时调用:

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);

在另一项活动中,我还希望使用当前用户令牌来调用我的端点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();
}

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

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

1 个答案:

答案 0 :(得分:4)

令牌实际上是识别用户连接的唯一ID。因此,每次重新启动连接时,都会生成另一个令牌。如果要为每个用户使用唯一标识符,则应获取其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();
            }
        }
};

您的其他活动也是如此:

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