我正在使用 React-Redux 开发一个 Webapp,向不同域中的 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 中。在网站中,我使用反应模块 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);