Я использую 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 днями, иначе сессия истечет в конце навигации.
Это хороший способ? Что вы предлагаете?
Заранее спасибо за помощь.