onAuthStateChanged令牌刷新
问题描述:
我使用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()
,而宁可让它与其他任何事情都是异步的。谢谢!
答
我想我在Android的onAuthStateChanged
的文档中理解了这句话,并认为这意味着当令牌过期时会调用该函数。相反,它只是叫那么令牌实际上改变:
当在改变当前用户的令牌
我有这个在Javascript由JWT令牌解码目前实施然后使用带有过期日期的setTimeout
函数。在名为i的函数中,为令牌执行强制刷新。 这应该确保令牌始终有效。
令牌不会自动刷新,除非您使用实时数据库或在令牌过期时调用getToken()。如果你想令牌自动刷新,你必须设置你自己的主动刷新每小时(令牌的生命周期)并调用getToken(true); – bojeil
我知道该令牌不会自动刷新,但根据我的理解,firebase应该通知我有关令牌的过期时间,因为它可以在内部保存到期时间。这个通知对Android(Java)有效,但似乎不适用于Javascript。 – puelo
Android和Javascript SDK应该表现相同。我不确定你在问什么。你是否在你的应用中使用实时数据库?令牌不应在到期时公布。他们在刷新时宣布。 – bojeil