Expressjs身份验证

时间:2011-12-09 11:41:03

标签: javascript authentication node.js express

我对登录和会话有一些疑问。我有这段代码:

数据库查询:

login: function(req,callback) {
    var query = 'SELECT id FROM users WHERE email = "' + req.body.email_login + '" AND password = "' + hashlib.sha1(req.body.password_login) + '" LIMIT 1';
    client.query(query, callback);
}

路线:

app.post('/login', function(req, res, next) {

    users.login(req,function(err, results) {
        if (err) {
            res.render('index');
        } else if (results[0]) {
            req.session.userdata = results[0];
                req.session.is_logged_in = true;
                res.render('site/news');
        }

    }
}

Auth中间件:

var auth = function (req, res, next) {
    if (req.session.userdata && req.session.is_logged_in === true) {
        next();
    } else {
        res.redirect('/');
    }
}

我使用db store进行会话。

现在我的问题是:

1)这是一种安全的方法吗?或者我应该考虑采取其他方式吗?

2)假设我有这个URL /domain/users/1,其中最后一个段是用于获取用户数据的用户ID。 在该视图中,我有一个用于更改用户数据的表单。检查用户ID是否与会话用户ID匹配然后显示表单是否安全?

在视图中:

// e.g. get the session.id from dynamichelper
if (data.userid === session.userdata.id) {
    // The form where user can change his data contained within here
}

服务器将使用SSL。

提前致谢

乔治

2 个答案:

答案 0 :(得分:6)

在db查询代码中,检查req.body.email_login和req.body.password_login以确保它们不是null并且它们是字符串。有人可能会发送一个空响应,这会产生一个内部错误。

同样在路线中,您可能需要记录错误并将用户重定向到/500.html页面(内部错误):

if (err) {
  console.log(error);
  res.redirect('500');
} else ...

您不应该在视图中执行此操作:

if(data.userid === session.userdata.id) { //The form where user can change his data contained within here }

尝试在模型中实现这一点(最好),为它创建一个函数,并将一个参数传递给视图,如下所示:

res.render('view', { loggedIn: true });

模特的功能:

function checkUser(id, session) {
  return (userid === session.userdata.id);
}
...
module.exports.checkUser = checkUser;

您可以从路径中调用它(例如):

res.render('view', { loggedIn: model.checkUser(req.body.id, req.session); }

答案 1 :(得分:1)

您可能还想查看http://passportjs.org/

相关问题