req.cookies.session 在 Chrome 中未定义
req.cookies.session is undefined in Chrome
我正在使用 node.js + express + firebase 实现会话登录和会话 cookie 验证。
我下面的代码 在 Firefox 中有效 但在 Chorme 中无效。在Chrome中,req.cookies.session
是undefined
这是我的代码:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(cookieParser());
async sessionLogin(req, res) {
try {
// Verify idToken
const idToken = req.body.idToken.toString();
var decodedToken = await this.authService.verifyIdToken(idToken);
// Only process if the user just signed in in the last 5 minutes.
if (new Date().getTime() / 1000 - decodedToken.auth_time > 5 * 60)
throw { code: "auth/expired-token", message: "The provided token is expired."}
// Set session expiration to 5 days.
const expiresIn = 60 * 60 * 24 * 5 * 1000;
const options = { maxAge: expiresIn, httpOnly: true, secure: true };
var sessionCookie = await this.authService.createSessionCookie(idToken, { expiresIn });
res.cookie('session', sessionCookie, options);
res.json({ status: 'success' });
} catch(err) {
res.status(401).json(err);
}
}
async checkSessionCookieMiddleware(req, res, next){
const sessionCookie = req.cookies.session || '';
console.log(sessionCookie);
try {
var decodedClaims = await this.authService.verifySessionCookie(sessionCookie, true /** checkRevoked */);
req.user = decodedClaims;
next();
} catch(err){
console.log(err);
res.redirect("/");
}
}
在任何浏览器中登录成功,然后方法 checkSessionCookieMiddleware
在 Chrome 中失败,因为 req.cookies.session
是 undefined
。
我的错误在哪里?
解决方案:
我找到了解决办法。
我不得不改变
const options = { maxAge: expiresIn, httpOnly: true, secure: true };
到
const options = { maxAge: expiresIn, httpOnly: true, secure: false /* to test in localhost */ };
scure: false
成功了,因为我仍然在本地主机上服务。
也感谢@user2740650。
我找到了解决办法。我不得不改变
const options = { maxAge: expiresIn, httpOnly: true, secure: true };
至
const options = { maxAge: expiresIn, httpOnly: true, secure: false /* to test in localhost */ };
scure: false
成功了,因为我仍然在本地主机上服务。也感谢@user2740650。
我正在使用 node.js + express + firebase 实现会话登录和会话 cookie 验证。
我下面的代码 在 Firefox 中有效 但在 Chorme 中无效。在Chrome中,req.cookies.session
是undefined
这是我的代码:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(cookieParser());
async sessionLogin(req, res) {
try {
// Verify idToken
const idToken = req.body.idToken.toString();
var decodedToken = await this.authService.verifyIdToken(idToken);
// Only process if the user just signed in in the last 5 minutes.
if (new Date().getTime() / 1000 - decodedToken.auth_time > 5 * 60)
throw { code: "auth/expired-token", message: "The provided token is expired."}
// Set session expiration to 5 days.
const expiresIn = 60 * 60 * 24 * 5 * 1000;
const options = { maxAge: expiresIn, httpOnly: true, secure: true };
var sessionCookie = await this.authService.createSessionCookie(idToken, { expiresIn });
res.cookie('session', sessionCookie, options);
res.json({ status: 'success' });
} catch(err) {
res.status(401).json(err);
}
}
async checkSessionCookieMiddleware(req, res, next){
const sessionCookie = req.cookies.session || '';
console.log(sessionCookie);
try {
var decodedClaims = await this.authService.verifySessionCookie(sessionCookie, true /** checkRevoked */);
req.user = decodedClaims;
next();
} catch(err){
console.log(err);
res.redirect("/");
}
}
在任何浏览器中登录成功,然后方法 checkSessionCookieMiddleware
在 Chrome 中失败,因为 req.cookies.session
是 undefined
。
我的错误在哪里?
解决方案:
我找到了解决办法。
我不得不改变
const options = { maxAge: expiresIn, httpOnly: true, secure: true };
到
const options = { maxAge: expiresIn, httpOnly: true, secure: false /* to test in localhost */ };
scure: false
成功了,因为我仍然在本地主机上服务。
也感谢@user2740650。
我找到了解决办法。我不得不改变
const options = { maxAge: expiresIn, httpOnly: true, secure: true };
至
const options = { maxAge: expiresIn, httpOnly: true, secure: false /* to test in localhost */ };
scure: false
成功了,因为我仍然在本地主机上服务。也感谢@user2740650。