первый коммит, надеюсь последний.
Сделанно: 1. минимально рабочий бэк 2. 2 модели 3. 1 миграция
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
const jwt = require("jsonwebtoken");
|
||||
const config = require("../config/auth.config.js");
|
||||
const db = require("../models");
|
||||
const User = db.user;
|
||||
|
||||
verifyToken = (req, res, next) => {
|
||||
let token = req.headers["x-access-token"];
|
||||
if (!token) {
|
||||
return res.status(403).send({
|
||||
message: "Токена нету у вас"
|
||||
});
|
||||
}
|
||||
jwt.verify(token,
|
||||
config.secret,
|
||||
(err, decoded) => {
|
||||
if (err) {
|
||||
return res.status(401).send({
|
||||
message: "Вы не авторизованны",
|
||||
});
|
||||
}
|
||||
req.userId = decoded.id;
|
||||
next();
|
||||
});
|
||||
};
|
||||
|
||||
isAdmin = (req, res, next) => {
|
||||
User.findByPk(req.userId).then(user => {
|
||||
user.getRoles().then(roles => {
|
||||
for (let i = 0; i < roles.length; i++) {
|
||||
if (roles[i].name === "admin") {
|
||||
next();
|
||||
return;
|
||||
}
|
||||
}
|
||||
res.status(403).send({
|
||||
message: "Вам нужна роль админ"
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
isModerator = (req, res, next) => {
|
||||
User.findByPk(req.userId).then(user => {
|
||||
user.getRoles().then(roles => {
|
||||
for (let i = 0; i < roles.length; i++) {
|
||||
if (roles[i].name === "moderator") {
|
||||
next();
|
||||
return;
|
||||
}
|
||||
}
|
||||
res.status(403).send({
|
||||
message: "Вам нужна роль модератор"
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
isModeratorOrAdmin = (req, res, next) => {
|
||||
User.findByPk(req.userId).then(user => {
|
||||
user.getRoles().then(roles => {
|
||||
for (let i = 0; i < roles.length; i++) {
|
||||
if (roles[i].name === "moderator") {
|
||||
next();
|
||||
return;
|
||||
}
|
||||
if (roles[i].name === "admin") {
|
||||
next();
|
||||
return;
|
||||
}
|
||||
}
|
||||
res.status(403).send({
|
||||
message: "Нужна роль либо модератор, любо админ"
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
const authJwt = {
|
||||
verifyToken: verifyToken,
|
||||
isAdmin: isAdmin,
|
||||
isModerator: isModerator,
|
||||
isModeratorOrAdmin: isModeratorOrAdmin
|
||||
};
|
||||
module.exports = authJwt;
|
||||
@@ -0,0 +1,7 @@
|
||||
const authJwt = require("./authJwt");
|
||||
const verifySignUp = require("./verifySignUp");
|
||||
|
||||
module.exports = {
|
||||
authJwt,
|
||||
verifySignUp
|
||||
};
|
||||
@@ -0,0 +1,52 @@
|
||||
const db = require("../models");
|
||||
const ROLES = db.ROLES;
|
||||
const User = db.user;
|
||||
|
||||
checkDuplicateUsernameOrEmail = (req, res, next) => {
|
||||
User.findOne({
|
||||
where: {
|
||||
username: req.body.username
|
||||
}
|
||||
}).then(user => {
|
||||
if (user) {
|
||||
res.status(400).send({
|
||||
message: "Ошибка. Такой ник уже есть."
|
||||
});
|
||||
return;
|
||||
}
|
||||
User.findOne({
|
||||
where: {
|
||||
email: req.body.email
|
||||
}
|
||||
}).then(user => {
|
||||
if (user) {
|
||||
res.status(400).send({
|
||||
message: "Ошибка. Такая почта уже есть."
|
||||
});
|
||||
return;
|
||||
}
|
||||
next();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
checkRolesExisted = (req, res, next) => {
|
||||
if (req.body.roles) {
|
||||
for (let i = 0; i < req.body.roles.length; i++) {
|
||||
if (!ROLES.includes(req.body.roles[i])) {
|
||||
res.status(400).send({
|
||||
message: "Ошибка. Нет такой роли = " + req.body.roles[i]
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
next();
|
||||
};
|
||||
|
||||
const verifySignUp = {
|
||||
checkDuplicateUsernameOrEmail: checkDuplicateUsernameOrEmail,
|
||||
checkRolesExisted: checkRolesExisted
|
||||
};
|
||||
|
||||
module.exports = verifySignUp;
|
||||
Reference in New Issue
Block a user