javascript - 会话不适用于 chrome,但适用于 Firefox
问题描述
我正在使用 Firebase ui 登录用户并使用 cookie parser 。我从 Firebase Docs Firebase Docs编写了代码
奇怪的是它只适用于 firefox Desktop。我尝试使用 chrome 但它不起作用。它也不适用于手机浏览器。
保存会话 cookie 的路由
app.get('/sessionLogin', (req, res) => {
const idToken = req.query.idToken;
console.log(idToken);
admin.auth().verifyIdToken(idToken).then(function (decodedToken) {
var uid = decodedToken.uid;
console.log("uid " + uid);
const expiresIn = 60 * 60 * 24 * 5 * 1000;
admin.auth().createSessionCookie(idToken, { expiresIn })
.then((sessionCookie) => {
const options={maxAge : expiresIn ,httpOnly:true,secure:true};
res.cookie('session',sessionCookie,options);
res.redirect('/newPage');
},error =>{
res.status(401).send("OPSIE");
});
}).catch(function (err) {
console.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
console.log(err);
});
});
经验证的路线
app.get('/newPage', (req, res) => {
const sessionCookie = req.cookies.session || req.headers.cookie|| '' ;
// Verify the session cookie. In this case an additional check is added to detect
// if the user's Firebase session was revoked, user deleted/disabled, etc.
admin.auth().verifySessionCookie(
sessionCookie, true /** checkRevoked */)
.then((decodedClaims) => {
res.render('newPage');
})
,catch(error => {
// Session cookie is unavailable or invalid. Force user to login.
res.redirect('/signIn');
console.log(error); //this is where error is being logged
});
});
我得到的错误
FirebaseAuthError: Decoding Firebase session cookie failed. Make sure you passed the entire string JWT which represents a session cookie. See https://firebase.google.com/docs/auth/admin/manage-cookies for details on how to retrieve a session cookie.
at FirebaseAuthError.FirebaseError [as constructor] (D:\FIREBAESFJAGDS\functions\node_modules\firebase-admin\lib\utils\error.js:42:28)
at FirebaseAuthError.PrefixedFirebaseError [as constructor] (D:\FIREBAESFJAGDS\functions\node_modules\firebase-admin\lib\utils\error.js:88:28)
at new FirebaseAuthError (D:\FIREBAESFJAGDS\functions\node_modules\firebase-admin\lib\utils\error.js:147:16)
at FirebaseTokenVerifier.verifyJWTWithProjectId (D:\FIREBAESFJAGDS\functions\node_modules\firebase-admin\lib\auth\token-verifier.js:166:35)
at D:\FIREBAESFJAGDS\functions\node_modules\firebase-admin\lib\auth\token-verifier.js:102:26
at processTicksAndRejections (internal/process/task_queues.js:97:5) {
errorInfo: {
code: 'auth/argument-error',
message: 'Decoding Firebase session cookie failed. Make sure you passed the entire string JWT which represents a session cookie. See https://firebase.google.com/docs/auth/admin/manage-cookies for details on how to retrieve a session cookie.'
},
codePrefix: 'auth'
}
解决方案
事实证明,在 https 上运行服务器解决了这个问题(如果有意义的话)。
推荐阅读
- java - 无法确定 Collectors.groupingBy 的返回类型
- excel - 如何强制 FORMAT 使用十进制表示
- android - 在 kotlin 中的片段上的 textView 上设置边距
- regex - 在 PLC 语言中输入掩码通配符,我需要表示 4 个字符
- ruby-on-rails - 解析解密的 PGP 电子邮件
- c++ - 如何使“days-since-epoch”值与 std::chrono 配合得很好?
- php - Mod重写斜杠问题
- r - R extracting the frequencies
- python - Pygame 程序未正确执行
- json - 如何使用 SparkAR 网络模块获取 JSON