我尝试根据用户是否使用0.4.0中的本地护照身份验证登录来尝试路由到两个不同的服务器视图。
我尝试过使用:
core.server.routes.js
app.route('/*').get(core.renderIndex);
core.server.controller.js
exports.renderIndex = function(req, res) {
if (req.user) {
res.render('modules/core/server/views/index', {
user: req.user || null
});
} else {
res.render('modules/core/server/views/noauth', {
user: null
});
}
};
如果我删除所有cookie以清除会话并刷新,那么它确实会呈现noauth.server.view.html文件。一旦我进行了身份验证,并且req.user在我的条件中测试为true,它仍会呈现noauth.server.view.html。
提前感谢您的帮助!
答案 0 :(得分:0)
我认为你需要这个:
简单路由中间件,以确保用户通过身份验证。 这会在需要保护的任何资源上路由中间件。如果 请求已通过身份验证(通常通过持久登录会话), 请求将继续。否则,用户将被重定向到 页。
function ensureAuthenticated(req, res, next) {
res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');
if (req.isAuthenticated()) { return next(); }
res.redirect('/login')
}
编辑:首先,您不要检查您的路线中是否有用户经过身份验证! 我是这样做的:
我的登录页面:
app.post('/login',
passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }),
function(req, res) {
res.redirect('/authenticated');
});
因此,每当用户访问某个页面时,您需要确保它们是否仍然存在或完全未经过身份验证:
app.get('/account', ensureAuthenticated, function(req, res){
res.render('account', { user: req.user });
});