Проблема со входом и регистрацией JWT в Express JS - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь создать вход и регистрацию, используя 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;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...