Экспресс-аутентификация - PullRequest
2 голосов
/ 09 декабря 2011

У меня есть несколько вопросов относительно входа и сессий. У меня есть этот код:

Запрос в БД:

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 Middleware:

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, где последний сегмент - это идентификатор пользователя, который используется для получения пользовательских данных. И в этом представлении у меня есть форма для изменения пользовательских данных. Безопасно ли проверить, совпадает ли идентификатор пользователя с идентификатором пользователя сеанса, а затем показать форму?

На виде:

// 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.

Заранее спасибо

George

Ответы [ 2 ]

6 голосов
/ 09 декабря 2011

В коде запроса 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 голос
/ 12 декабря 2012

Вы также можете посмотреть на http://passportjs.org/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...