我使用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
。我在我的server-config中这样做了:
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-Request和POST-Request中设置。同样在POST-Request中我可以看到set-cookie-header。但response.headers['set-cookie']
的日志仍然未定义。
编辑:
此行为处于开发模式: 服务器在localhost:3000上运行,客户端在localhost:8080上运行。
当我为生产模式构建vue.js-client以便它们都在localhost:3000上运行时,它可以工作。
有什么想法吗?
谢谢!
答案 0 :(得分:1)
Access-Control-Allow-Credentials: true
(这是'控制'是否可以在CORS请求中使用Cookie和其他'凭据')不兼容与Access-Control-Allow-Origin: *
- 您需要如果您想使用cookie,请指定请求来自ACAO响应标头的确切来源。
基本上,提取Origin
请求标头并确保它在Access-Control-Allow-Origin
响应标头中“镜像回”。在您的情况下,它可能是https://localhost:8080
,但您不应对其进行硬编码 - 始终从Origin
请求标头中提取它。
所以答案应该像在Origin
值中指定server.use.cors.origin
请求标头的值一样简单。