我已经使用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分钟调用一次还是应该在登录时进行设置?请提供一些提示或有关此情况的任何教程。
一段时间不活动(我认为不到1小时)后,我也会在控制台中获得以下代码:
auth.esm.js:121 POST https://securetoken.googleapis.com/v1/token?key=AIza... 403
答案 0 :(得分:1)
Firebase令牌设置为在60分钟后过期。然后它会自动为您刷新。无法配置到期时间,因此不需要在前端代码中做任何特殊的事情。
唯一的窍门是,您需要授予应用程序API密钥使用令牌服务API的权限,以便一旦过期就可以为您铸造新的id令牌。这是在GCP控制台,API和服务(凭据)中完成的。
因此,代码应如下所示
添加用户authentication state change Listener
public ControllerTestsBase(WebApplicationContext webApplicationContext,
FilterChainProxy springSecurityFilterChain) {
this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
.addFilter(springSecurityFilterChain)
.build();
}
实施登录逻辑
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
}
})
您可以根据使用情况auth-state-persistence设置登录前的身份验证状态持久性。
祝你好运;)
答案 1 :(得分:0)
首先,我要对我英语不好的人表示抱歉。我不太了解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插入为LOCAL