Авторизация - это предоставление определённому лицу или группе лиц прав на выполнение определённых действий; а также процесс проверки (подтверждения) данных прав при попытке выполнения этих действий.
Ситуация, в которой термины используются неправильно, довольно распространена. Авторизация относится к списку таких терминов. Обычно ей называют аутентификацию. Об этом всегда стоит помнить, но мир (как минимум русскоязычный) уже не изменить.
Рассмотрим простой пример с использованием авторизации, удаление поста.
app.delete('/posts/:id', (req, res, next) => {
if (res.locals.currentUser.isGuest()) {
const error = new AccessDeniedError();
return next(error);
}
state.posts = state.posts.filter(post =>
!(post.id.toString() === req.params.id));
res.redirect('/posts');
});
Удалить пост может только залогиненный пользователь. Все остальные (гости) должны
получить в ответ 403 forbidden
, код, который означает, что произошел отказ в доступе.
В более сложных случаях нужно проверять, что пост может удалить только его автор.
Любой сайт, сложнее чем сайт-визитка, содержит в себе множество проверок на допустимость
тех или иных действий, что может привести к очень большому дублированию проверок
по всем обработчикам. Разберём, как этого можно избежать.
// a middleware sub-stack shows request info for any
// type of HTTP request to the /user/:id path
router.use('/user/:id', (req, res, next) => {
console.log('Request URL:', req.originalUrl);
next();
}, (req, res, next) => {
console.log('Request Type:', req.method);
next();
});
Express позволяет указывать любое количество мидлвар для одного и того же маршрута.
Для этого можно передать любое количество аргументов (являющихся мидлварами) в функцию use
.
Этим фактом мы и воспользуемся.
const requiredAuth = (req, res, next) => {
if (res.locals.currentUser.isGuest()) {
return next(new AccessDeniedError());
}
next();
};
app.delete('/posts/:id', requiredAuth, (req, res) => {
state.posts = state.posts.filter(post =>
!(post.id.toString() === req.params.id));
res.redirect('/posts');
});
В примере выше определена мидлвара requiredAuth
, которую можно подключать к любому
маршруту. Она проверяет, залогинен ли пользователь или нет, если нет, то дальше по
цепочке передаётся ошибка. Как мы уже знаем, это приводит к тому, что начинают выполняться
только мидлвары, обрабатывающие ошибки. Этот механизм полезен не только для контроля доступа,
таким образом можно выполнять любые подготовительные действия, которые используются
разными маршрутами.
Вам ответят команда поддержки Хекслета или другие студенты.
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт