Я пытался создать систему аутентификации с помощью Node.js для небольшого веб-приложения.
До сих пор я сделал маршрут входа:
app.post('/login', async function(req, res) {
let login = req.body.login;
let password = req.body.password;
let userId = await databaseUsers.verifyUser(login, password);
if(userId != null) {
req.session.userId = userId;
}
res.send(userId != null);
});
Затем я создал защищенный маршрут:
app.get('/homepage', requiresLogin, function(req, res) {
res.sendFile(__dirname + '/client/homepage.html');
});
И функция, которая проверяет, зарегистрирован ли пользователь:
function requiresLogin(req, res, next) {
if (req.session.userId) {
next();
}
else {
res.send('You must be logged in to view this page.');
}
}
На стороне клиента я использую только JS с API выборки:
let url = "/login";
let headers = new Headers({
"Content-Type": "application/json"
});
let init = {
method: 'POST',
headers: headers,
cache: 'default',
body: JSON.stringify({'login': user.login, 'password': user.password})
};
let verif = await fetch(url, init);
Теперь, когда я вхожу в систему, сервер сохраняет в сеансе идентификатор пользователя.
Но при попытке добраться до /homepage я получаю сообщение об ошибке «не подключен».
Я мог бы использовать глобальную переменную для хранения сеанса, но тогда многопользовательский режим больше не будет доступен.
Я также думал об использовании файлов cookie, например, когда пользователь успешно входит в систему, сервер отправляет ему файл cookie.
Но как тогда обрабатывать доступ пользователя к страницам?
I also thought using cookies, like when the user successfully logs in, the server sends him a cookie
именно это и делает экспресс сессия :) - person Jonas Wilms   schedule 27.03.2018verif
содержит значение успеха? - person Jonas Wilms   schedule 27.03.2018fetch
по умолчанию не хранит куки :) - person Jonas Wilms   schedule 27.03.2018