我正在使用React-Redux开发Web应用程序,向不同域中的nodejs中的API发出请求。
要登录用户,我会将凭据发送到我的API,这会验证它们并将其作为JWT发回给我。我试图通过使用ExpressJS来做到这一点,所以在我的API的登录路径中我有:
res.cookie("my_token", token);
问题是Cookie没有被添加到会话中。使用Mozilla,我可以看到Set-Cookie属性在带有正确cookie的标题中,但它并没有显示在我的资源中。
我还使用DHC进行了一些测试,使用DHC将Cookie成功存储在我的会话cookie中。
我有
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Credentials", true);
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
在我的网站和api中。在网站上,我使用react模块axios来发出请求。在api中,我使用cookie-parser来处理cookie。这些是我的中间件(api和app):
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Credentials", true);
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
const cookieParser = require("cookie-parser");
app.use(cookieParser());
const bodyParser = require("body-parser");
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
const morgan = require("morgan");
app.use(morgan('dev'));
这是我的要求:
axios.post(`${ROOT_URL}/login`, creds)
.then(res => { /*...*/ })
.catch(err => { /*...*/ });
这是我的回答:
res.cookie("session_token", token, { domain: ".mydomain.com" }).send(response);
答案 0 :(得分:2)
我对Angular代码有类似的问题,我正在解决问题
res.header("Access-Control-Allow-Origin", "*");
还不够你可以做这样的事情
res.header("Access-Control-Allow-Origin", req.header('Origin'));
因为您需要返回主机而不是星号,这仅用于开发目的,我建议您稍后将其更改为某个静态网址