Middleware для авторизации
async function authorize(req, res, next) {
try {
// 1. достать токен пользователя с заголовка Authorization
const authorizationHeader = req.get("Authorization");
const token = authorizationHeader.replace("Bearer ", "");
// 2. достать id пользователя с пейлоада или вернуть пользователю
// ошибку со статус кодом 401
let userId;
try {
userId = await jwt.verify(token, config.jwtSecret).userId;
} catch (err) {
next(new UnauthorizedError("User not authorized"));
}
// 3. достать соответствующего пользователя. Если такого нет - вернуть
// ошибку со статус кодом 401
// userModel - модель пользователя в нашей системе
const user = await userModel.findUserById(
userId
);
if (!user) {
throw new UnauthorizedError();
}
// 4. Если все прошло успешно - передать запись пользователя и токен в req
// и передать обработку запроса на следующий middleware
req.user = user;
req.token = token;
next();
} catch (err) {
next(err);
}
}Last updated