【发布时间】:2021-12-30 08:41:18
【问题描述】:
我正在学习并为我的博客网站申请身份验证!
我正在使用express-session 来处理登录。浏览器和服务器会话上的 Cookie 工作正常。
但是,我在服务器端 express 应用上检索 cookie 时遇到问题。我尝试了以下方法:
- 使用 cookie 解析器,req.cookies 和 req.signedCookies 都返回
[Object: null prototype]。 - 设置 CORS
- req.cookie & req.header.cookie 返回
undefined - 我可以在浏览器网络选项卡中的连接中看到“Cookie”标头。
我的代码/设置如下:
function auth (req, res, next) {
// Problem: Cannot read browser cookie of HTTP requests.
console.log('Based on browser', req.cookie, req.cookies, req.signedCookies);
next();
}
router.get('/', auth, async (req, res) => { // ... }
中间件
app.use(cors({
origin: ['http://localhost:3000'],
credentials: true
}));
app.use(cookieParser()) // Also tried with secret option.
app.use(session({
secret: 'top-secret',
resave: true,
rolling: true,
saveUninitialized: false,
store: store, // this is working
cookie: {
maxAge: 1000 * 60 * 60 * 24 * 14,
httpOnly: true,
secure: process.env.NODE_ENV !== 'Development',
sameSite: process.env.NODE_ENV === 'Development' ? 'lax' : 'none'
}
}))
提前谢谢你:)
【问题讨论】:
-
您在发出 ajax 请求吗?因为这些默认情况下不传输 cookie。 (编辑:跨域的)
-
你好 Chris,我使用 fetch API 提出了请求
-
是的,但我假设来自不同的服务器?这意味着您需要通过将
credentials: include添加到 fetch 选项来启用 cookie 的传输。 developer.mozilla.org/en-US/docs/Web/API/fetch#syntax -
我之前没有包含该选项。但不幸的是,添加该选项并没有解决问题。 :(
-
你能显示相关的抓取代码吗?
标签: javascript node.js express cookies express-session