是否可以在Firebase中使用会话cookie来保持登录状态而无需使用firebase-admin程序包?

问题描述 投票:0回答:1

我正在我的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,以使我的用户不会在每次导航到新路径时都被注销?

感谢您的事先帮助!

javascript firebase firebase-authentication session-cookies next.js
1个回答
0
投票

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})
    }
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.