Я пытаюсь создать вход и регистрацию, используя JWT. но у меня есть проблема с методом POST для входа и регистрации.
В случае входа: когда я пытаюсь в почтальоне и все поля в x- www-form-urlencoded, я отправляю. Эта ошибка появляется «Неверный пароль», но пароль, который я использовал, является правильным, без использования шифрования md5 или sha1
В случае регистрации: когда я пытаюсь в почтальоне и укажу все требования в x- www-form-urlencoded, тогда я Отправить. Эта ошибка появляется "Роль не существует"
Кстати, это мой код:
verify_signup. js
const db = require('../config/db.config.js');
const config = require('../config/config.js');
const Roles = config.ROLES;
const User = db.user;
checkDuplicate = (req, res, next) => {
User.findOne({
where: {
username: req.body.username
}
}).then(user => {
if(user){
res.status(400).send("User name is already use");
return;
}
User.findOne({
where: {
email: req.body.email
}
}).then(user => {
if(user){
res.status(400).send("Email is already use");
return;
}
next();
});
});
}
checkRoleExisted = (req, res, next) => {
for(let i=0; i<req.body.roles.length; i++){
if(!Roles.includes(req.body.roles[i].toUpperCase())){
res.status(400).send("Role doesn't exist" + req.body.roles[i]);
return;
}
}
next();
}
const verifySignUp = {};
verifySignUp.checkDuplicate = checkDuplicate;
verifySignUp.checkRoleExisted = checkRoleExisted;
module.exports = verifySignUp;
инициализация. js
const db = require('../config/db.config.js');
const config = require('../config/config.js');
var jwt = require('jsonwebtoken');
var bcrypt = require('bcryptjs');
const User = db.user;
const Role = db.role;
const Op = db.Sequelize.Op;
exports.signup = (req, res) => {
User.create({
first_name: req.body.first_name,
last_name: req.body.last_name,
username: req.body.username,
email: req.body.email,
password: bcrypt.hashSync(req.body.password, 8)
}).then(user => {
Role.findAll({
where: {
name: {
[Op.or]: req.body.roles
}
}
}).then(roles => {
user.setRoles(roles).then(() => {
res.send("User registered successfully");
});
}).catch(err => {
res.status(500).send("See error : " + err);
});
}).catch(err => {
res.status(500).send("See error : " + err);
})
}
exports.signin = (req, res) => {
User.findOne({
where: {
username: req.body.username
}
}).then(user => {
if (!user) {
return res.status(404).send('User not found');
}
var passwordIsValid = bcrypt.compareSync(req.body.password, user.password);
if (!passwordIsValid) {
return res.status(401).send({ auth: false, accessToken: null, reason: "Invalid password" });
}
var token = jwt.sign({ id: user.id }, config.secret, {
expiresIn: 86400
});
res.status(200).send({ auth: true, accessToken: token });
}).catch(err => {
res.status(500).send('See error : ' + err);
});
}
exports.customerBoard = (req, res) => {
User.findOne({
where: {id: req.userId},
attributes: ['first_name', 'last_name', 'username', 'email'],
include: [{
model: Role,
attributes: ['id', 'name'],
through: {
attributes: ['userId', 'roleId'],
}
}]
}).then(user => {
res.status(200).json({
"description": "Customer board",
"user": user
});
}).catch(err => {
res.status(500).json({
"description": "Can't access customer board",
"error": err
});
})
}
exports.administratorBoard = (req, res) => {
User.findOne({
where: {id: req.userId},
attributes: ['first_name', 'last_name', 'username', 'email'],
include: [{
model: Role,
attributes: ['id', 'name'],
through: {
attributes: ['userId', 'roleId'],
}
}]
}).then(user => {
res.status(200).json({
"description": "Administrator board",
"user": user
});
}).catch(err => {
res.status(500).json({
"description": "Can't access administrator board",
"error": err
});
})
}
exports.managerBoard = (req, res) => {
User.findOne({
where: {id: req.userId},
attributes: ['first_name', 'last_name', 'username', 'email'],
include: [{
model: Role,
attributes: ['id', 'name'],
through: {
attributes: ['userId', 'roleId'],
}
}]
}).then(user => {
res.status(200).json({
"description": "Manager board",
"user": user
});
}).catch(err => {
res.status(500).json({
"description": "Can't access manager board",
"error": err
});
})
}
user.model.ts
module.exports = (sequelize, Sequelize) => {
const User = sequelize.define('user', {
first_name: {
type: Sequelize.STRING
},
last_name: {
type: Sequelize.STRING
},
username: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
password: {
type: Sequelize.STRING
}
});
return User;}
role.model.ts
module.exports = (sequelize, Sequelize) => {
const Role = sequelize.define('role', {
id: {
type: Sequelize.INTEGER,
primaryKey: true
},
name: {
type: Sequelize.STRING
},
description: {
type: Sequelize.STRING
}
});
return Role;}