первый коммит, надеюсь последний.
Сделанно: 1. минимально рабочий бэк 2. 2 модели 3. 1 миграция
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
const db = require("../models");
|
||||
const config = require("../config/auth.config");
|
||||
const User = db.user;
|
||||
const Role = db.role;
|
||||
const Op = db.Sequelize.Op;
|
||||
const jwt = require("jsonwebtoken");
|
||||
const bcrypt = require("bcryptjs");
|
||||
|
||||
exports.sign_up = (req, res) => {
|
||||
User.create({
|
||||
username: req.body.username,
|
||||
email: req.body.email,
|
||||
password: bcrypt.hashSync(req.body.password, 8)
|
||||
})
|
||||
.then(user => {
|
||||
if (req.body.roles) {
|
||||
Role.findAll({
|
||||
where: {
|
||||
name: {
|
||||
[Op.or]: req.body.roles
|
||||
}
|
||||
}
|
||||
}).then(roles => {
|
||||
user.setRoles(roles).then(() => {
|
||||
res.send({ message: "Регистрация пользователя прошла успешно" });
|
||||
});
|
||||
});
|
||||
} else {
|
||||
user.setRoles([1]).then(() => {
|
||||
res.send({ message: "Регистрация пользователя прошла успешно" });
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
res.status(500).send({ message: err.message });
|
||||
});
|
||||
};
|
||||
|
||||
exports.sign_in = (req, res) => {
|
||||
User.findOne({
|
||||
where: {
|
||||
username: req.body.username
|
||||
}
|
||||
})
|
||||
.then(user => {
|
||||
if (!user) {
|
||||
return res.status(404).send({ message: "Пользователь не найден" });
|
||||
}
|
||||
const passwordIsValid = bcrypt.compareSync(
|
||||
req.body.password,
|
||||
user.password
|
||||
);
|
||||
if (!passwordIsValid) {
|
||||
return res.status(401).send({
|
||||
accessToken: null,
|
||||
message: "Неправельный пароль"
|
||||
});
|
||||
}
|
||||
const token = jwt.sign({ id: user.id },
|
||||
config.secret,
|
||||
{
|
||||
algorithm: 'HS256',
|
||||
allowInsecureKeySizes: true,
|
||||
expiresIn: 86400,
|
||||
});
|
||||
let authorities = [];
|
||||
user.getRoles().then(roles => {
|
||||
for (let i = 0; i < roles.length; i++) {
|
||||
authorities.push("ROLE_" + roles[i].name.toUpperCase());
|
||||
}
|
||||
res.status(200).send({
|
||||
id: user.id,
|
||||
username: user.username,
|
||||
email: user.email,
|
||||
roles: authorities,
|
||||
accessToken: token
|
||||
});
|
||||
});
|
||||
})
|
||||
.catch(err => {
|
||||
res.status(500).send({ message: err.message });
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user