【发布时间】:2016-09-26 00:25:51
【问题描述】:
有谁知道令牌过期需要多长时间?现在没有选项可以在控制台上设置令牌有效性。
【问题讨论】:
标签: session firebase token firebase-authentication
有谁知道令牌过期需要多长时间?现在没有选项可以在控制台上设置令牌有效性。
【问题讨论】:
标签: session firebase token firebase-authentication
在最新版本的 Firebase 身份验证中,登录会话不再过期。相反,它结合使用长期帐户令牌和短期、自动刷新的访问令牌,以实现两全其美。
如果您想结束用户的会话,可以拨打signOut()。
【讨论】:
它确实过期了。登录一小时后,令牌 ID 到期。如果您尝试验证 sdk 返回错误“错误:Firebase ID 令牌已过期。从您的客户端应用获取新令牌并重试。有关如何检索 ID 令牌的详细信息,请参阅 https://firebase.google.com/docs/auth/server/verify-id-tokens。”
有没有办法将过期时间更改为 Firebase 令牌,而不是自定义令牌。
任何知道这实际上是如何工作的人。
【讨论】:
currentUser.getIdToken(),但我的问题是这会返回一个承诺:-/我不想在我的请求拦截器中做异步的东西......
对于还在迷茫的人,全是explained in great detail here
如果您的应用包含自定义后端服务器,则 ID 令牌可以而且应该 用于与它进行安全通信。而不是发送请求 使用用户的原始 uid,很容易被恶意软件欺骗 客户端,发送可以通过 Firebase 验证的用户 ID 令牌 Admin SDK(如果 Firebase 没有,甚至是第三方 JWT 库) 使用您选择的语言的 Admin SDK)。为了促进这一点, 现代客户端 SDK 提供了检索 ID 令牌的便捷方法 对于当前登录的用户。 Admin SDK 确保 ID 令牌 有效并返回解码后的令牌,其中包括 它所属的用户以及添加到它的任何自定义声明。
【讨论】:
如果上面的答案仍然让你感到困惑, 这就是我所做的:
firebase.auth().onAuthStateChanged(async user => {
if (user) {
const lastSignInTime = new Date(user.metadata.lastSignInTime);
const lastSignInTimeTimeStamp = Math.round(lastSignInTime.getTime() / 1000);
const yesterdayTimeStamp = Math.round(new Date().getTime() / 1000) - (24 * 3600);
if(lastSignInTimeTimeStamp < yesterdayTimeStamp){
await firebase.auth().signOut()
this.setState({
loggedIn: false
});
return false;
}
this.setState({
loggedIn: true,
user
});
}
})
【讨论】: