Javascript 与date.now()相比,firebase解码令牌的过期日期
我正在使用jwtDecode包对firebase刷新令牌进行解码,因此得到如下对象:Javascript 与date.now()相比,firebase解码令牌的过期日期,javascript,reactjs,firebase,firebase-authentication,refresh-token,Javascript,Reactjs,Firebase,Firebase Authentication,Refresh Token,我正在使用jwtDecode包对firebase刷新令牌进行解码,因此得到如下对象: aud: "app name" auth_time: 1596323784 email: "any email" email_verified: false exp: 1596327384 firebase: {identities: {…}, sign_in_provider: "password"} iat: 1596323784 iss: &qu
aud: "app name"
auth_time: 1596323784
email: "any email"
email_verified: false
exp: 1596327384
firebase: {identities: {…}, sign_in_provider: "password"}
iat: 1596323784
iss: "https://securetoken.google.com/app name"
user_id: "8mV0nvPuv3ctsZxegS5Sz4uwshP2"
我想将过期日期始终与date.now()
进行比较,因此当令牌过期时,用户重定向到登录页面,但让我困惑的是date.now()
的值大于新令牌的exp*1000
if(decodedToken.exp * 1000 > Date.now()) {
authenticated = true
} else {
authenticated = false;
window.location.href="/login"
}
现在,这段代码会导致页面每秒重定向到登录页面,并且永远无法访问主页,我需要将更改为,这可能只是一个整数溢出错误-请尝试这样编写:
if(decodedToken.exp > Math.floor(Date.now() / 1000) {
}
不过,读取令牌的到期时间并不是一个好的做法,因为API可能会出于其他原因拒绝令牌,例如撤销和客户端与服务器之间的时钟差异
这样做效果更好:
- 当从API收到401状态时,访问令牌被视为过期
- 然后尝试在授权服务器上刷新访问令牌,然后使用新的访问令牌重试API调用
- 最终刷新将失败,在这种情况下,授权服务器将返回无效的授权错误代码
- 此错误代码表示会话结束,然后需要重定向用户以再次登录
date.now()之后吗
直到令牌过期。您不必编写任何代码来保持用户登录。正如我所说,只要你不注销,它就会自动发生。@DougStevenson好吧,你是对的,但为什么会发生呢??新的令牌exp是