检查用户身份验证

时间:2012-06-21 12:32:35

标签: node.js authentication express mongoose

我有中间件允许我检查用户身份验证,这里是:

function checkAuth(req, res, next) {
 if (!req.session.user_id) {
   res.redirect('/login');
 } else {
    next();
 } 
}

我有两个问题;

  1. 强大的用户验证检查吗?或者我应该在DB中检查user.id,如下所示:

    if (!req.session.user_id) {
       res.redirect('/login');
    } else {
      User.findById(req.session.user_id, function (err, user) {
        if (!user) return res.redirect('/login');
        else return next();
     })
    }
    
  2. 如果检查失败,我会重定向到登录页面:

     res.redirect('/login');
    

    但是如果我收到一个AJAX请求,我应该发送以下内容(我认为)

     res.send(403, 'Permission denied');
    

    那么如何查看请求类型并发送适当类型的响应?   这样做是否正确?

1 个答案:

答案 0 :(得分:4)

检查会话就足够了。服务器的会话和客户端之间存在映射,这就是它足够安全的原因。当然,如果您想要“绝对”安全性(但不存在100%安全性),则使用SSL。

以下是Django / RoR如何检查请求是否来自AJAX调用(在node.js代码中转换):

function isXHR( req, res ) {
    return !!req.header( 'HTTP_X_REQUESTED_WITH' ) === 'XMLHttpRequest';
}

但是,这意味着XHR调用必须包含此HTTP标头。大多数库都这样做(jQuery,Dojo,YUI,...),但是如果你正在做手动XHR请求,你一定不要忘记包含它。

另一种可能符合您需求的方式:

function isJSON( req, res ) {
    return !!req.header( 'Content-Type' ) === 'application/json';
}

在那里,您正在检查Content-Type标题。如果它询问某些JSON数据(如大多数XHR请求),则向其发送一些JSON数据。