Какой лучший способ реализовать помните меня функциональность? - PullRequest
0 голосов
/ 07 марта 2019

Я использую PassportJS, и я фактически реализовал функцию запомнить меня. В любом случае, я не знаю, является ли мое решение хорошим решением для обеспечения безопасности.

По существу, когда пользователь входит в систему, я выполняю этот запрос ajax:

$("#login").click(function (event) {

    event.preventDefault();

    let postData =
    {
        'email': $('#email').val(),
        'password': $("#password").val(),
        'remember': $('#remember').is(':checked')
    };

    $.ajax({
        type: 'POST',
        contentType: "application/json",
        url: '/auth/login',
        data: JSON.stringify(postData),
        dataType: 'json',
        success: function (data) {
            window.location.replace('/dashboard');
        },
        error: function (jqXHR, textStatus, errorThrown) {
            $('#messages').append(JSON.parse(jqXHR.responseText).errors);
        }
    });
});

затем внутри контроллера auth я обрабатываю опцию remember следующим образом:

exports.login = function (req, res, next) {
    passport.authenticate('local', function (error, user, info) {
        if (error) {
            return res.status(500).send({ errors: error });
        }

        if (!user) {
            return res.render('partial/messages', { error: 'Invalid credentials.', layout: false }, function (err, list) {
                res.status(401).send({ errors: list });
            });
        }

        if (req.body.remember) {
            req.session.cookie.maxAge = 30 * 24 * 60 * 60 * 1000;
        } else {
            req.session.cookie.expires = false;
        }

        req.logIn(user, function (err) {
            if (err) { return next(err); }
            return res.status(200).send({ msg: true });
        });

    })(req, res, next);
}

Я просто установил дату окончания срока действия между 30 днями, иначе сессия истечет в конце навигации.

Это хороший способ? Что вы предлагаете?

Заранее спасибо за помощь.

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