Как реализовать авторизацию в node.js?

Рейтинг: 1Ответов: 1Опубликовано: 22.12.2014

На данный момент сделал так:
Отправляю GET запросом логин/пароль.

var data = {
        'username': username,
        'password': password
        };

        $.ajax({
          type: "GET",
          url: 'login',
          data: data,
          success: console.log('response sucsess')
    });

На сервере принимаю и сверяю с базой:

router.get('/', function(req, res) {

    var connection = mysql.createConnection({
        host     : 'localhost',
        user     : 'user',
        password : 'password',
        database : 'database'
    });

    connection.connect();

    var username = req.query.username,
    password = req.query.password
    connection.query('SELECT password FROM `users` WHERE login = "' + username +'"',            function(err, rows, fields) {
        if (err) throw err;
        else if (rows.length > 0 && password == rows[0].password) {
            console.log('Hello');
        } else {
            console.log('Go away!');
        }
    });

    connection.end();
    res.end();
});

Но, походу, это все очень неправильно и небезопасно. Как сделать безопасную авторизацию с сессиями? Какой их общий принцип роботы? Можно ли какой-либо готовый пример вида: отправил данные -> получил сессию и дальше проверяешь что-то вроде if (user.registered){ ... }?

Ответы

▲ 1

В целом обычная схема.

Но лучше отправлять запрос через POST

$.post('/', data, callback);

В дальнейшем доступ к переменным будет не req.query, а req.body

p.s. Не забудь включить app.use(express.urlencoded());

Так же нужно добавить для параметров connection.escape

var username = connection.escape(req.query.username),
    password = connection.escape(req.query.password);

И по-хорошему отправлять res.send() для вывода результата на стороне клиента

if(rows.length > 0 && password == rows[0].password) {
    console.log('Hello');
    res.send(true);
} else {
    console.log('Go away!');
    res.send({
        error: "Ошибка авторизации"
    });
}