我使用Javascript Firebase SDK来验证我的用户,它对于“正常”登录/注销过程正常工作。 现在我还有一个打开的套接字连接和REST-Api调用,这取决于身份验证令牌的有效性。遗憾的是,当令牌过期时,似乎onAuthStateChanged
函数未被调用。onAuthStateChanged令牌刷新
我onAuthStateChanged
回调函数的定义如下:
Auth._onAuthStateChanged = function() {
var that = this;
return function(oUser) {
// We can extend the User Object with values we need or want.
if (oUser && !that._oUser) {
that.onFirebaseSignIn(oUser);
} else if (oUser && that._oUser && oUser.uid !== that._oUser.uid) {
that.onFirebaseUserChanged();
} else if (oUser && that._oUser && oUser.uid === that._oUser.uid) {
that.onFirebaseTokenChanged();
} else if (!oUser) {
that.onFirebaseSignOut();
}
};
};
现在类似的工作在Android精品正确通知我,如果令牌到期。 定义是这样的:
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if (firebaseAuth.getCurrentUser() != null && AccountTools.getCurrentUserId() == null) {
onFirebaseSignIn(firebaseAuth);
} else if (firebaseAuth.getCurrentUser() != null &&
AccountTools.getCurrentUserId() != null &&
!AccountTools.getCurrentUserId().equals(firebaseAuth.getCurrentUser().getUid())) {
onFirebaseUserChanged(); // This may be the same as just signIn!
} else if (firebaseAuth.getCurrentUser() != null &&
AccountTools.getCurrentUserId() != null &&
AccountTools.getCurrentUserId().equals(firebaseAuth.getCurrentUser().getUid())) {
getAuthToken(false);
} else if (firebaseAuth.getCurrentUser() == null){
onFirebaseSignOut();
}
}
};
定义的onAuthStateChanged
回调不是不够好行为就靠这个?如果不。我有什么选择?每次我进行REST调用时,我都需要一个有效的令牌,并且在进行任何REST调用之前真的不需要依赖总是调用getToken()
,而宁可让它与其他任何事情都是异步的。谢谢!
令牌不会自动刷新,除非您使用实时数据库或在令牌过期时调用getToken()。如果你想令牌自动刷新,你必须设置你自己的主动刷新每小时(令牌的生命周期)并调用getToken(true); – bojeil
我知道该令牌不会自动刷新,但根据我的理解,firebase应该通知我有关令牌的过期时间,因为它可以在内部保存到期时间。这个通知对Android(Java)有效,但似乎不适用于Javascript。 – puelo
Android和Javascript SDK应该表现相同。我不确定你在问什么。你是否在你的应用中使用实时数据库?令牌不应在到期时公布。他们在刷新时宣布。 – bojeil