node.js - Express/Passport 没有为超测代理设置 cookie
问题描述
我正在尝试使用 supertest 和 mocha 对我的 Express 服务器进行一些集成测试。用户通过 Passport LocalStrategy 进行身份验证,我正在使用 cookie-session 设置会话 cookie。在浏览器和 Postman 中一切正常。但是我不能使它与 supertest 结合使用:快速响应不包含注册/登录路由上的 cookie,因此我无法发出任何经过身份验证的请求。
在 Express 服务器上cors
,中间件已经到位,cookie 是sameSite
和httpOnly
. 知道可能出了什么问题吗?
解决方案
我遇到了一个非常相似的问题。经过反复试验,我发现“安全”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'
}
}));
推荐阅读
- c# - 在 Razor 页面中使用 API 更新自定义字段,C#
- python - 使用 tkinter 获取多行(域名)
- arrays - 是否可以将字典中的特定键用于具有自定义 tableViewCell 的非静态 tableView
- html - 尝试复制 IE 11 的“按需匹配”或“Ram”布局,但项目在不应该被拉伸时被拉伸
- javascript - Firebase,检测用户如何连接(谷歌、Facebook、电子邮件......)
- r-markdown - 在 RStudio 的 R Markdown 中,四个反引号块之后的代码块失去交互性(例如,“运行当前块”按钮消失)
- javascript - 为什么我的复选框长度不正确?在 laravel 中
- ksqldb - ksqlDB 表中的数据是持久的?
- scala - 在 Spark 的 Edge 和 Vertices 中存储多列数据
- php - 可以执行 MYSQL SELECT 查询以跳过某些特定值