所以我一直在关注有关在 firebase 中管理会话 cookie 的文档,我几乎完全按照他们的示例进行操作(我在这里做了一些调整)。无论如何,除了注销用户外,一切都按预期进行,我通过清理 cookie 并使用该revokeRefreshTokens()
方法(就像他们在文档中所做的那样)将用户注销:
router.get("/logout", async (req, res) => {
const sessionCookie = req.cookies.session || "";
res.clearCookie("session")
try {
const decodedClaims = await admin.auth().verifySessionCookie(sessionCookie);
await admin.auth().revokeRefreshTokens(decodedClaims.sub);
res.redirect("/login")
} catch (e) {
req.flash("error", "Already logged out")
res.redirect("back");
}
});
这里的问题是当用户注销然后立即尝试重新登录时,他不能,我在我的服务器上收到此错误:The provided Firebase ID token is expired
,用户必须等待 30-50 秒才能重新登录。
所以我的问题是:
- 我需要
revokeRefreshTokens()
注销用户吗? - 这种方法的行为(不允许用户重新登录 30s-50s)是有意的吗?
注意:在他们使用客户端 sdk 对用户进行身份验证的文档中,我使用了Auth REST API(当然在后端)。