案例
当我访问我的网址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;
答案 0 :(得分:0)
以防万一其他人遇到此问题:passport-saml设置的默认cacheProvider是内存缓存。我的问题是我正在运行服务器的多个实例。所以A会重定向到B并且没有存储req.user或任何req.session信息。我将我的bluemix配置更改为1个实例并且工作正常。干杯〜