Это много, чтобы принять. Был там. Если вы используете API-интерфейс сервера с Web SPA, вам нужно разбить свое исследование отдельно от этих двух.
Сторона сервера:
Хороший старт с начала:
Node.js Сервер и основы аутентификации: Express, сеансы, паспорт
У меня очень и очень короткие сроки, необходимые для создания аутентификации и авторизации. Популярный способ сделать это в express с помощью express middleware , как описано в руководстве выше.
Клиентская сторона:
Главное, чтобы имейте в виду, что после того, как вы сделали серверную часть, каждый URL должен возвращать код состояния HTTP : 401
или 403
(возможно, другие), когда:
401 Несанкционированный
Хотя в стандарте HTTP указано «неавторизованный», семантически этот ответ означает «не прошедший проверку подлинности». То есть клиент должен аутентифицировать себя, чтобы получить запрошенный ответ.
свободный перевод: Вы не вошли в систему.
403 Запрещено
Клиент не имеет прав доступа к контенту; то есть он не авторизован, поэтому сервер отказывается предоставить запрошенный ресурс. В отличие от 401, личность клиента известна серверу.
свободный перевод: вам не разрешено видеть / делать это
Так что в вашем клиенте вы хотите создать унифицированную http api caller для обработки этих кодов. Этот «унифицированный абонент» может сильно различаться в зависимости от того, какие технологии вы используете (Redux, MobX, Fetch API, ...).
Я оставлю вам пример с использованием fetch и обещания:
function globalFetch(url, data) {
return new Promise((resolve, reject) => {
fetch(url, data)
.then(res => {
if (res.status == 401) {
// move SPA to login page here.
reject();
}
if (res.status == 403) {
// move SPA to "you are not allowed to see this stuff" page
reject();
}
resolve(res);
})
.catch(erro => {
// do stuff with the error, like log.
// move spa to "That’s an error." page.
reject();
})
});
}
, и вы используете эту функцию для всех запросов в вашем SPA, например:
globalFetch('/api/users/login', { method: 'POST', body: { ... } });