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......所以我很困惑。
注销不会使令牌无效。它只会让 SDK 忘记它,因此它不会自动刷新或传递给其他 Firebase 产品。旧令牌的有效期最长为 1 小时,直到需要刷新为止。如果不刷新,则验证失败。
如果您将 ID 令牌保存在 cookie 中,您还应该将其从 cookie 中删除,以便有效地注销,这样它就不会传递到您的后端。
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |