Я создаю блог с использованием новейших технологий MEAN Stack.Зарегистрированный пользователь может создать нового пользователя с ролями «admin» и «модератор».
Создание нового пользователя с ролью администратора или роли модератора
Этот маршрутзащищен и в настоящее время только авторизованный пользователь может получить к нему доступ.Вот промежуточное ПО для проверки того, аутентифицирован ли пользователь или нет.
//check_auth.js
const jwt = require('jsonwebtoken');
module.exports = (req, res, next) => {
try {
const token = req.headers.authorization.split(' ')[1];
jwt.verify(token, 'my_jwt_secret');
next();
} catch (error) {
res.status(401).json({ message: 'Auth failed!'});
}
};
Я применяю это промежуточное ПО для защиты от несанкционированного доступа к некоторым из моих маршрутов.Я хочу создать подобное промежуточное программное обеспечение, в котором я проверяю, является ли пользователь администратором или нет.Таким образом, я могу применить это промежуточное ПО на маршруте для создания пользователей, так что только авторизованный пользователь и пользователь с ролью «администратор» могут создать нового пользователя.
Я думаю, что это может помочь в создании промежуточного ПО,Когда пользователь входит в систему с идентификатором, электронная почта и роль сохраняются в jwt.
router.post("/login", (req, res, next) => {
let fetchedUser;
User.findOne({ email: req.body.email })
.then(user => {
if (!user) {
return res.status(401).json({
message: "Auth failed"
});
}
fetchedUser = user;
return bcrypt.compare(req.body.password, user.password);
})
.then(result => {
if (!result) {
return res.status(401).json({
message: "Auth failed"
});
}
const token = jwt.sign(
{ email: fetchedUser.email, userId: fetchedUser._id, role: fetchedUser.role },
"my_jwt_secret",
{ expiresIn: "1h" }
);
res.status(200).json({
token: token,
expiresIn: 3600
});
})
.catch(err => {
return res.status(401).json({
message: "Auth failed"
});
});
});
Весь код можно найти в моем репозитории GitHub: https://github.com/rajotam/Eleven