【问题标题】:req.cookies.session is undefined in Chromereq.cookies.session 在 Chrome 中未定义
【发布时间】:2020-11-29 18:45:42
【问题描述】:

我正在使用 node.js + express + firebase 实现会话登录和会话 cookie 验证。 我下面的代码 works 在 Firefox 中但不在 Chorme 中。在 Chrome 中,req.cookies.sessionundefined

这是我的代码:

    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.sessionundefined

我的错在哪里?

解决方案:

我找到了解决方案。 我不得不改变 const options = { maxAge: expiresIn, httpOnly: true, secure: true };const options = { maxAge: expiresIn, httpOnly: true, secure: false /* to test in localhost */ };

scure: false 成功了,因为我仍然从本地主机服务。 还要感谢@user2740650。

【问题讨论】:

  • 我也从那个答案中得到启发,但没有成功
  • 我有几乎相同的代码在 Chrome 中运行良好。您确定 Chrome 没有配置为拒绝 cookie 吗?其次,使用了secure: true,所以你在所有情况下都使用https,对吧?
  • 好的,找到问题了。我必须将 sessionCookie 参数更改为 const options = { maxAge: expiresIn, httpOnly: true, secure: false /* to test in localhost */ };,因为我从 localhost 提供服务
  • 大声笑,是的,错过了 2 秒。

标签: node.js firebase-authentication session-cookies


【解决方案1】:

我找到了解决方案。我不得不改变

const options = { maxAge: expiresIn, httpOnly: true, secure: true };

const options = { maxAge: expiresIn, httpOnly: true, secure: false /* to test in localhost */ };

scure: false 成功了,因为我仍然从 localhost 提供服务。还要感谢@user2740650。

【讨论】:

    猜你喜欢
    • 2019-03-17
    • 2016-09-30
    • 1970-01-01
    • 2019-02-25
    • 2012-09-03
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多