Pro*_*roV 3 javascript ajax xmlhttprequest node.js
我有一个节点后端,它应该允许来自我在 localhost:3000 上运行的前端应用程序的跨源请求。因此,我已将 cors 策略限制在我的域中。
import csrf from 'csurf';
app.use(
cors({
origin: 'http://localhost:3000',
credentials: true
})
);
const csrfProtection = csrf({
cookie: {
maxAge: 900,
domain: 'http://localhost:3000'
}
})
router.get('/csrfToken', csrfProtection, async (req, res, next) => {
res.json({ token: req.csrfToken() });
});
Run Code Online (Sandbox Code Playgroud)
当我现在向我的服务器端点(在 localhost:5000 上运行)发出请求时,它向我返回以下错误,即无法设置 cookie。
fetch('http://localhost:5000/csrfToken', {
method: 'GET',
credentials: 'include'
})
Run Code Online (Sandbox Code Playgroud)
这与 CORS 无关。这就是 cookie 的工作原理。
set-cookie
标头中的域表示,http://localhost:3000
但请求是针对http://localhost:5000
.
这是一个不同的来源,因此是一个无效的 cookie。
set-cookie
来自一个源的标头不可能为不同的源设置 cookie。http://localhost:5000
只能为 设置 cookie http://localhost:5000
。
如果您真的想设置 cookie,:3000
那么解决方法是通过 cookie 以外的其他格式(例如在请求正文中)提供数据,然后让客户端 JShttp://localhost:3000
使用文档设置 cookie 。饼干 API。
如果您想为:5000
(这似乎更有可能)设置 cookie,请在set-cookie
标题中获取正确的端口号。
const csrfProtection = csrf({
cookie: {
maxAge: 900,
domain: 'http://localhost:5000'
}
})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11635 次 |
最近记录: |