Javascript Firebase JS SDK中会话令牌的显式更新
我已经使用Firebase Auth为以下几个提供程序实现了signin方法:Javascript Firebase JS SDK中会话令牌的显式更新,javascript,reactjs,firebase,firebase-authentication,Javascript,Reactjs,Firebase,Firebase Authentication,我已经使用Firebase Auth为以下几个提供程序实现了signin方法: firebase.auth().setPersistence(firebase.auth.Auth.Persistence.LOCAL).then(() => { let provider = new firebase.auth.GoogleAuthProvider(); // + facebook, gitHub provider.addScope('profile'); provider.add
firebase.auth().setPersistence(firebase.auth.Auth.Persistence.LOCAL).then(() => {
let provider = new firebase.auth.GoogleAuthProvider(); // + facebook, gitHub
provider.addScope('profile');
provider.addScope('email');
firebase.auth().signInWithPopup(provider).then(result => {
// app logic here
然而,这段代码给了我60分钟的持续会话,我想学习如何自动更新当前用户会话,而不必被迫每小时登录一次
我还使用此代码“侦听”当前用户会话状态
firebase.auth().onAuthStateChanged(user => if (!user) //goto LoginPage
但它本身并不“监听”,它只在我尝试导航或更新页面时起作用。因此,我不知道如何使用Firebase方法限制访问的确切时间(例如,最多15分钟)
文档中说有一个getIdToken
方法,但是我不知道在哪里使用这个代码。它应该在到期前每60分钟调用一次,还是应该在登录时设置?请给出一些提示或任何关于这种情况的教程
编辑:
另外,在一段时间的不活动之后(我认为不到1小时),我在控制台中得到了这段代码:
你好,首先我要为我的英语不好说声对不起。我不太了解firebase,但我认为如果你写这样的东西,它应该会起作用:
firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION).then(() => {
let provider = new firebase.auth.GoogleAuthProvider(); // + facebook, gitHub
provider.addScope('profile');
provider.addScope('email');
firebase.auth().signInWithPopup(provider).then(result => {
// app logic here
我的意思是,您应该使用firebase.auth.auth.Persistence.SESSION代替本地将firebase令牌设置为在60分钟后过期。然后它会自动为您刷新。没有办法配置过期时间,您不需要在前端代码中为此做任何特殊的操作 唯一的诀窍是,您需要授予应用程序API密钥使用令牌服务API的权限,以便能够在令牌过期后为您创建新的id令牌。这是在GCP控制台、API和服务(凭证)中完成的 因此,代码应该很简单,如下所示
fbAuth.setPersistence(firebase.auth.Auth.Persistence.LOCAL)
.then(() => {
return fbAuth.signInWithEmailAndPassword(email, password)
.then(userCredential => {
// Login success path
})
.catch(error => {
// Login error path
});
})
.catch(error => {
// Persistence setting error path
})
祝你好运;) 你能详细说明一下你的答案吗?因为官方文件上说,
会话
只持续到选项卡打开为止。抱歉,我真的不知道firebase是什么,所以我在谷歌上搜索了如何保持登录,它说这样做会话
不起作用,关闭选项卡会擦除会话,您必须再次登录。firebase会话是不确定的。通常情况下,让用户无需任何操作即可登录不会有任何问题。尝试刷新ID令牌时,您必须遇到其他问题。请提供有关您遇到的403错误的更多信息。
fbAuth.onAuthStateChanged(user => {
if (user) {
// User is logged in
// Proceed with your logged in user logic
} else {
// USer is not logged in
// Redirect to the login page
}
})
fbAuth.setPersistence(firebase.auth.Auth.Persistence.LOCAL)
.then(() => {
return fbAuth.signInWithEmailAndPassword(email, password)
.then(userCredential => {
// Login success path
})
.catch(error => {
// Login error path
});
})
.catch(error => {
// Persistence setting error path
})