【问题标题】:Nodejs check for authentification before each routes renderingNode Js 在每个路由渲染之前检查身份验证
【发布时间】:2014-05-30 07:35:37
【问题描述】:

我正在使用会话和 cookie 对用户进行身份验证。我想检查有 cookie 的用户,如果有,我将设置会话变量。 所以基本上我所做的是:

  1. 检查会话变量是否存在
  2. 如果没有,检查用户是否有cookie
  3. 如果他有 cookie,我会比较数据库中的值。
  4. 如果一切正常,我将设置会话。

现在我想将该过程放入一个模块中,这样我就不必将该代码粘贴到我网站的每个路由中。

假设我已将所有代码放在位于 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. 在渲染之前检查一些会话变量。

如果有人可以帮助我!

【问题讨论】:

    标签: node.js express routes middleware


    【解决方案1】:

    您可以像这样简单地导出中间件(假设您使用的是快速会话处理程序和 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();
        });
    };
    

    【讨论】:

    • 您好 Farid,感谢您的回答。是的,我使用 session 和 cookieParser。你的回答对我来说有点复杂,因为我没有使用任何用户模型。另外,我不想发送 401 状态。我更新了我写得不太好的问题,也许你现在可以给我正确的答案。泰
    猜你喜欢
    • 1970-01-01
    • 2021-04-08
    • 2012-08-24
    • 2019-02-23
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    相关资源
    最近更新 更多