在Angular应用加载

时间:2017-12-25 23:10:43

标签: javascript angularjs node.js express passport-saml

案例 当我访问我的网址https://example.com/时,我的角度应用程序会加载,并且网址会将哈希路由添加到https://example.com/#/。我的角度代码检查来自saml网址的用户凭据并且找不到任何内容,因此它会调用护照登录,然后将我带到我的SAML登录页面(公司托管),然后使用正确的用户详细信息将我返回到我的主页。

我的问题是,在执行我的app.get(*)catch all之前,能够阻止加载角度应用并对{strong> express 中的所有应用路由进行req.user检查通过index.html页面发送。

客户端路由是否可行?以下是现在配置的server.js。任何帮助将不胜感激。

var env = require('dotenv').config();
var express = require("express");
var app = express();
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var fs = require('fs');
var path = require('path');
var passport = require('./server/sso/passport')(app);

// Enforce HTTPS on all requests
app.enable('trust proxy');
app.use(function (req, res, next) {
  if (req.headers['x-forwarded-proto'] === 'https') {
    next();
  } else {
    res.redirect('https://' + req.headers.host + req.url);
  }
});

// Set Up
app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// All responses return CORS allowed
app.use(function (req, res, next) {
  if (req.headers.origin) { res.header('Access-Control-Allow-Origin', req.headers.origin); }
  res.setHeader("Access-Control-Allow-Credentials", true);
  res.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,OPTIONS");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
  ('OPTIONS' == req.method) ? res.send(200) : next();
});

// API Routes
app.use(require('./server/routes/book-routes'));
app.use(require('./server/routes/car-routes'));

// SSO
app.use(require('./server/sso/routes')(passport));

// Serve the client website.
app.use(express.static(path.resolve(__dirname, 'dist')));

// Route all unhandled requests to index.html, so client's router can handle them.
app.get('*', (req, res) => {
  var authenticated = req.user;
    if (authenticated) {
      res.sendFile(path.resolve(__dirname, 'dist', 'index.html'));
    } else {
      res.redirect('/samlLogin', 301);
    }
});

// Start server on the specified port and binding host
app.listen(appEnv.port, appEnv.bind, function () {
  // Print a message when the server starts listening.
  console.log("Serving taas-tools app at " + appEnv.url);
});

// Export the app and listener.
module.exports = app;

1 个答案:

答案 0 :(得分:0)

以防万一其他人遇到此问题:passport-saml设置的默认cacheProvider是内存缓存。我的问题是我正在运行服务器的多个实例。所以A会重定向到B并且没有存储req.user或任何req.session信息。我将我的bluemix配置更改为1个实例并且工作正常。干杯〜