首页 > 解决方案 > Express/Passport 没有为超测代理设置 cookie

问题描述

我正在尝试使用 supertest 和 mocha 对我的 Express 服务器进行一些集成测试。用户通过 Passport LocalStrategy 进行身份验证,我正在使用 cookie-session 设置会话 cookie。在浏览器和 Postman 中一切正常。但是我不能使它与 supertest 结合使用:快速响应不包含注册/登录路由上的 cookie,因此我无法发出任何经过身份验证的请求。

在 Express 服务器上cors,中间件已经到位,cookie 是sameSitehttpOnly. 知道可能出了什么问题吗?

标签: node.jsexpresstestingcookiessupertest

解决方案


我遇到了一个非常相似的问题。经过反复试验,我发现“安全”cookie 标志是问题所在。我将以下配置用于“快速会话”

const session = require('express-session');
app.use(session({
    secret: envVars.SESSION_SECRET,
    name: 'app-name',
    resave: false,
    saveUninitialized: false,
    cookie: { 
      path: '/', 
      secure : true, 
      maxAge : null, 
      sameSite: 'none' 
    } 
}));

从 cookie 中删除安全标志解决了这个问题。

const session = require('express-session');
app.use(session({
    secret: envVars.SESSION_SECRET,
    name: 'app-name',
    resave: false,
    saveUninitialized: false,
    cookie: { 
      path: '/', 
      // secure : true, 
      maxAge : null, 
      sameSite: 'none' 
    } 
}));

推荐阅读