【发布时间】:2018-07-28 12:52:18
【问题描述】:
我使用 express 4.16.2 和 cors 2.8.4 针对 Node.js 服务器运行 Vue.js 2.5.2 和 axios 0.17.1。
当我登录时
axios.post('/login', {"username": "a", "password": "b").then((response) => {
console.log(response.headers['set-cookie']);
}
我得到undefined 作为输出。在其他topics 上,他们告诉设置Access-Control-Expose-Headers: Access-Token, Uid。我在我的服务器配置中这样做了:
const express = require('express'),
cookieParser = require('cookie-parser'),
cors = require('cors'),
bodyParser = require('body-parser'),
const server = express();
server.use(cookieParser());
server.use(bodyParser.json({limit: '50mb'}));
server.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
server.use(cors({
"origin": "*",
"credentials": true,
"exposedHeaders": ["Uid", "Access-Token"]
// same for "Uid, Access-Token"
// Adding "set-cookie" to this list did not work.
}));
我可以在 Chrome 开发者工具栏中看到,Access-Control-Expose-Headers-Option 设置在 OPTION-Request 和 POST-Request 中。同样在 POST-Request 中,我可以看到 set-cookie-header。但是response.headers['set-cookie']的日志还是未定义。
编辑:
此行为处于开发模式: 服务器在 localhost:3000 上运行,客户端在 localhost:8080 上运行。
当我为生产模式构建 vue.js-client 以便两者都在 localhost:3000 上运行时,它可以工作。
有什么想法吗?
谢谢!
【问题讨论】:
-
您需要将
set-cookie添加到exposedHeaders列表中,因为这说明允许客户端访问哪些标头 -
嗨 Ferrybig,不,遗憾的是这不起作用。与此同时,我注意到了其他一些事情......我编辑了我的帖子
-
你找到解决办法了吗?
-
不,我从我的项目中删除了有关身份验证的所有内容并切换到 keycloak。所以我在我的客户端中针对 keycloak 进行身份验证并获得一个令牌。然后我将令牌连同我的请求一起发送到服务器,服务器也会根据 keycloak 检查这个令牌。
标签: node.js express vue.js cors