注销后,我的 firebase idToken 仍然有效吗?

tem*_*ame 1 javascript firebase firebase-authentication

我的 firebase 前端中有以下代码:

  document.querySelector('#sign-out').addEventListener('click', () => {
    firebase.auth().signOut().then(() => {
      document.location = '/sign-in';
    }, (error) => {
      console.error('Sign Out Error', error);
    });
  })
Run Code Online (Sandbox Code Playgroud)

这似乎有效。我看到网络请求成功,并且重定向到/sign-in发生。

但是,当我导航到 时/chatroom,我被视为已登录。我的 python/flask 后端在端点上具有以下代码:

@app.route("/chatroom")
def chatroom():
    if 'idToken' in request.cookies:
        id_token = request.cookies.get("idToken")
        try:
            decoded_token = auth.verify_id_token(id_token)
        except:
            print("INVALID TOKEN")
            return redirect(url_for("sign_in"))

        return render_template("chatroom.html")
    else:
        return redirect(url_for("sign_in"))
Run Code Online (Sandbox Code Playgroud)

/sign-inFirebase不是在我点击此路径时将用户重定向到,而是验证令牌是否有效,因此即使我已注销,我也可以继续。

我错过了什么?

编辑:

出于调试目的将代码更改为此:

firebase.auth().signOut().then(() => {
    firebase.auth().onAuthStateChanged((user) => {
        if (user) {
          console.log('still signed in');
        } else {
          console.log('signed out');
        }
      });
    }, (error) => {
      console.error('Sign Out Error', error);
    });
Run Code Online (Sandbox Code Playgroud)

它输出signed out......所以我很困惑。

Dou*_*son 5

注销不会使令牌无效。它只会让 SDK 忘记它,因此它不会自动刷新或传递给其他 Firebase 产品。旧令牌的有效期最长为 1 小时,直到需要刷新为止。如果不刷新,则验证失败。

如果您将 ID 令牌保存在 cookie 中,您还应该将其从 cookie 中删除,以便有效地注销,这样它就不会传递到您的后端。