express - 不同口岸的本地 Passport 授权

标签 express angular passport.js express-session

我有一个在端口 5000 上运行的 node.js 应用程序,我在其中使用 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 未定义。我使用 express-session 来存储授权用户。

当我部署时,我将两个应用程序捆绑在一起,所以一切正常。

对于这个问题,有没有人有好的简单的解决方案?同样,它只是在开发中我遇到了这个问题。

最佳答案

您可以将这两个服务隐藏在代理之后,例如 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/去后端服务。

关于express - 不同口岸的本地 Passport 授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37652378/

相关文章:

node.js - 如何使用 momentjs 显示 MongoDB 检索到的日期从现在开始的时间?

node.js - 检查请求是来自移动设备还是网络

node.js - Express 在浏览器中返回 200,但使用 curl -I 返回 404

数组的 Angular 2 插值不起作用

passport.js - Passport js缺少凭据

node.js - 将文件上传到开发服务器后如何防止页面重新加载?

angular - 在 Angular 8 : : ASSERTION ERROR: NgModule 'MyReportsGridComponent' is not a subtype of 'NgModuleType' 中实现延迟加载时出错

angular - 如何在循环中以 Angular 实现多个顺序 Http 请求(每个新请求都取决于以前的结果)

angularjs - logout() 无法使用 Passport.js、express.js、AngularJs 工作

passport.js - 带有 Passport 、graphql-yoga 和prisma 的GoogleOAuth