如何在MeanJS 0.4.0中基于用户身份验证路由到不同的服务器视图?

时间:2015-06-24 13:36:55

标签: node.js express meanjs

我尝试根据用户是否使用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。

提前感谢您的帮助!

1 个答案:

答案 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 });
    });