我已经使用 Firebase Auth 为多个提供商实现了登录方法,如下所示:
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 分钟调用一次,还是应该在登录时设置?请提供一些提示或任何涉及这种情况的教程。
EDIT:
另外,经过一段时间的不活动(我认为不到 1 小时)后,我在控制台中收到了此代码:
auth.esm.js:121 POST https://securetoken.googleapis.com/v1/token?key=AIza... 403
Firebase 令牌设置为 60 分钟后过期。然后它会自动为您刷新。无法配置过期时间,并且您无需在前端代码中为此执行任何特殊操作。
唯一的技巧是,您需要授予应用程序 API 密钥使用令牌服务 API 的权限,以便在过期后能够为您创建新的 id 令牌。这是在 GCP 控制台、API 和服务(凭证)中完成的。
所以,代码应该很简单,如下所示
-
添加用户认证状态改变监听器
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
})
您可以在登录前设置身份验证状态持久性,具体取决于您的用例身份验证状态持久性.
-
确保您的应用程序 API 密钥有权访问 GCP 控制台中的令牌服务 API这是在GCP 控制台 | API 和服务 |证书然后编辑您的部署环境对应的密钥,以授予 API 密钥对令牌服务 API 的访问权限。
祝你好运 ;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)