【发布时间】:2018-09-13 13:27:38
【问题描述】:
我正在使用一个单独的后端 express api 构建一个 react web 应用程序,该 API 管理所有调用,包括通行证和设置 cookie。我们称后端服务为“api.com”,前端服务为“react.com”。我正在使用现有提供商 (spotify) 的通行证,授权成功后,会在 api.com 上设置一个 cookie。这个想法是用户与 react.com 交互,并通过代理向 api.com 发出请求。
如果我只是在浏览器中进行测试并调用 api.com/resource,则会自动设置 cookie。我知道这一点是因为我添加了一些日志记录,还因为需要授权的请求通过 cookie 成功。
但是,当我通过代理从 react.com 调用 api.com 时,未设置 cookie。这是代理时的预期行为吗?当我直接调用 api.com 时设置了 cookie 似乎很奇怪,但在重定向时却没有设置。有没有解决的办法?我的想法是将 cookie 从 api.com 传送到 react.com,将其保存在那里,然后在所有后续请求中发送,但这似乎有点过头了。我还想知道是否应该在 react.com 而不是 api.com 上设置 cookie。
我在 Firefox 和 Chrome 中都试过了,如果有什么不同,我会使用 axios 来处理 react.com 上的请求。
const request = axios({
method:'get',
url:'/api/resource'
});
使用 express-http-proxy 进行如下代理(仍在 react.com 上):
app.use('/', proxy('api.com', {
filter: (req) => {
return (req.path.indexOf('/api') === 0);
}
}));
但是一旦访问 api.com,任何身份验证都会失败,因为 cookie 不存在。
感谢任何帮助
【问题讨论】:
标签: node.js reactjs cookies proxy passport.js