Angular应用程序使用快速会话来认证端口3000和端口4200

时间:2019-02-13 05:41:44

标签: node.js angular express session express-session

使用angular-cli开发角度,

ng serve在端口4200上 node server.js位于端口3000

我要使用快速登录页面登录。

因为cookie和会话是特定于域的。由于端口不同,我可以通过快速页面上的端口3000登录自己,因为所有登录都在快速侧完成。

如何使用角度应用程序?

Expressjs将无法通过应用程序中的XHR接收会话和cookie。

因此要访问相同的localhost:3000/api/user路线

在角度范围内,XHR命中呈现302重定向,就像未登录的用户一样 但是直接访问它是200。

app.use(session({
    secret: 'somerandonstuffs',
    resave: true,
    saveUninitialized: false,
    cookie: { maxAge: 60 * 1000, httpOnly: true }
}));

const authUser = (req, res, next) => {
    if (req.session.user && req.cookies['connect.sid']) {
        next();
    } else {
        res.redirect(config.serverHost + '/login');
    }
};

app.route('/login')
    .get((req, res) => {
        res.sendFile(__dirname + '/views/login.html');
    })
    .post((req, res) => {
            req.session.user = {
                id: 'x@x.x'
            };
            res.redirect(config.clientHost);
        }
    });

app.all('/*', authUser, function (req, res, next) {
    next();
});

实际上,至少有人可以告诉我共享域(端口)是否完全可以使用这种方法工作?

1 个答案:

答案 0 :(得分:0)

您在4200(仅)上运行Angular CLI服务器进行开发。如果您想访问端口3000 API,请使用代理配置:

在angular.json中:

    "serve": {
      "builder": "@angular-devkit/build-angular:dev-server",
      "options": {
        "browserTarget": "cleanup:build",
        "proxyConfig": "proxy.conf.json"
      },

并在proxy.conf.json中定义重定向:

{
  "/api/*": {
    "target": "http://localhost:3000",
    "secure": false,
    "logLevel": "debug",
    "changeOrigin": true
  }
}

现在,在常规模式下,您将使用同一台Express服务器来服务Angular。

   "architect": {
    "build": {
      "builder": "@angular-devkit/build-angular:browser",
      "options": {
        "outputPath": "../express/webapp"

或者您的静态静态目录在哪里。