Nodejs在每次路由渲染之前检查身份验证

时间:2014-04-15 19:09:22

标签: node.js express routes middleware

我使用会话和Cookie来验证用户身份。我想检查有cookie的用户,如果是,我将设置会话变量。 基本上我做的是:

  1. 检查会话变量是否存在
  2. 如果没有,请检查用户是否有cookie
  3. 如果他有一个cookie,我会比较我的数据库中的值。
  4. 如果一切正常,我会设置会话。
  5. 现在我想将该流程纳入模块,因此我不必将该代码粘贴到我网站的每个路线中。

    我们说我已将所有代码放在位于routes/middleware/check_auth.js的中间件路由中。

    如何导出此模块,以便我可以检查我的路由页面,如果用户具有身份验证,请执行以下操作:

    //routes/index.js
    var check_auth = require('./middleware/check_auth');
    module.exports = function(app){
    
        app.get('/', check_auth, function(req, res){
            if(variable_from_check_auth == true){
                   res.render('index_with_auth');
                }else{
                   res.render('index_without_auth');
                }
        });
    };
    
    是的,我不确定这是正确的做法,还是只需要:

    1. 在每条路线上呼叫模块。
    2. 在渲染之前检查一些会话变量。
    3. 如果有人可以帮助我!

1 个答案:

答案 0 :(得分:0)

您可以像这样简单地导出中间件(假设您使用快速会话处理程序和cookie解析器):

var userModel = require('./user');
module.exports = function check_auth(res, req, next) {
    if (!res.session) {
        req.send(401);
        return;
    }

    userModel.isAuthenticated(req.session.id, function (result) {
        if (!result) {
            req.send(401);
            return;
        });

        next();
    });
};