2017-12-25 12 views
0

케이스 각도 응용 프로그램로드되기 전에 리디렉션합니다. 내 각도 코드는 saml URL에서 사용자 자격 증명을 확인하고 아무 것도 찾지 못하므로 여권 로그인을 호출하고 SAML 로그인 페이지 (회사 호스팅)로 이동하여 적절한 사용자 세부 정보로 다시 내 홈페이지로 돌아옵니다.Express는

내 질문이 주위로드에서 각 응용 프로그램을 방지 할 수있는 및 에있는 모든 내 응용 프로그램 경로에 req.user 확인을하고 내 app.get (*)가 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

passport-saml의 기본 cacheProvider 설정은 메모리 캐시입니다. 내 문제는 내가 서버의 여러 인스턴스를 실행했다는 것이 었습니다. 따라서 A는 B로 리디렉션되고 req.user 또는 req.session 정보를 저장하지 않습니다. 내 bluemix 구성을 1 인스턴스로 변경했는데 성공했습니다. 건배 ~