【发布时间】:2020-08-04 08:49:47
【问题描述】:
我正在使用 Firebase ui 让用户登录并使用 cookie 解析器。 我从 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'
}
【问题讨论】:
标签: javascript firebase session cookies firebase-authentication