我正在我的next.js应用中使用firebase登录。我的登录有效,但每次用户更改网站内部路径时都注销。登录后,如果用户将路径更改为path = / question / page firebase,则用户将使用path = /重定向到首页。firebase立即将其注销,但其会话cookie尚未过期。我想使用会话cookie来保持用户的登录状态,直到用户在网站上浏览的内容不再过期为止。我不会使用软件包firebase-admin,因为它会使我的next.js网站崩溃。我只能使用包含firebase.auth()和js-cookie包的常规firebase包。这是我用来设置Cookie的代码:
componentDidMount() {
let user = firebase_auth.currentUser;
console.log("User: ", user);
if (user) {
this.setState({user_logged_in: true});
return firebase_auth.currentUser.getIdToken(true).then(function (token) {
Cookies.set('__session', token, {expires: 7});
})
}
else {
this.setState({user_logged_in: false})
}
}
我将如何使用上面代码中调用的会话cookie,以使我的用户不会在每次导航到新路径时都被注销?
感谢您的事先帮助!
Firebase身份验证SDK在页面/应用程序重新加载之间自动保留用户状态,并在重新启动后尝试恢复该状态。
最有可能引起问题的原因是,当您访问firebase.auth().currentUser
时,Firebase仍在检查身份验证状态是否有效。
在那种情况下,解决方法是use an auth state listener:
componentDidMount() {
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
this.setState({user_logged_in: true});
firebase_auth.currentUser.getIdToken(true).then(function (token) {
Cookies.set('__session', token, {expires: 7});
})
} else {
this.setState({user_logged_in: false})
}
});
}