不同港口的本地护照授权
我有一个node.js应用程序运行在5000端口上,我使用passport.js作为授权。 我从发布请求授权用户,我使用自定义回调:
this.router.post('/member/login', (req, res, next) => {
passport.authenticate('local', (err, member, info) => {
if (err) res.json(400).json({message: "An error ocurred"});
if (!member) {
console.log("No member found!");
return res.status(409).json({message: "No member found!"})
}
req.logIn(member, (err) => {
if (err) {
console.log(err);
return res.status(400).json({message: "An error ocurred"});
}
return res.json(member);
});
})(req, res, next);
});
这工作正常,但是当我开发本地时,我有一个前端Angular2应用程序,它运行在不同的端口(4200),所以在我的开发中,我无法获得授权用户:req.user未定义。 我使用快速会话来存储授权用户。
当我部署时,我将两个应用程序捆绑在一起,所以一切正常。
有没有人有这个问题的一个很好和简单的解决方案? 它只是在发展中,我有这个问题。
例如,您可以在代理之后隐藏两个服务,例如Nginx。 并且您的服务都将使用1个地址。
NGINX配置示例
server {
listen 80;
server_name example.com;
proxy_set_header Host $http_host;
proxy_pass_header Server;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
location / {
proxy_pass http://frontend_address:port;
proxy_redirect default;
}
location ~ /api {
proxy_pass http://backend_address:port;
proxy_redirect default;
}
}
因此,所有请求http://example.com都会转到前端服务,并且所有请求http://example.com/api/都会转到后端服务。
我相信你有跨域问题,因为你在不同的端口上运行。
这个问题已经被讨论过了,我相信你可以在这里找到一个解决方案:Passport js无法在跨域维护会话
简而言之,您需要配置您的服务器以发送许可标题以允许跨域共享访问标题。
链接地址: http://www.djcxy.com/p/34523.html