错误:登录时数据和哈希必须为字符串

问题描述

我与邮递员检查了我的代码,并给出了此错误

(节点:6548)UnhandledPromiseRejectionWarning:错误:数据和哈希必须为字符串 在Object.compareSync(H:\ Chale \ Angular Projects \ mean-MysqL-login-reg \ node_modules \ bcrypt \ bcrypt.js:170:15) 在H:\ Chale \ Angular Projects \ mean-MysqL-login-reg \ routes \ Users.js:58:19 在processticksAndRejections(内部/流程/task_queues.js:97:5) (节点:6548)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。该错误是由于在没有catch块的情况下抛出异步函数而引起的,或者是由于拒绝了未经.catch()处理的诺言而引起的。要在未处理的承诺拒绝时终止节点进程,请使用CLI标志--unhandled-rejections=strict(请参见https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (拒绝ID:1) (节点:6548)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。

这是我的代码

routes / Users.js

const express = require('express');
const users = express.Router();
const cors = require('cors');
const jwt = require('jsonwebtoken');
const bcrypt = require("bcrypt");

const User = require('../model/User');
users.use(cors());

process.env.SECRET_KEY = 'secret';

//register
users.post('/register',(req,res) => {

    const userData = {
        first_name : req.body.first_name,last_name : req.body.last_name,email : req.body.email,password: req.body.password
    }

    User.findOne({
        where: {
            email: req.body.email
        }
    })
        .then(user => {
            if(user){
                const hash = bcrypt.hashSync(userData.password,10)
                userData.password = hash
                User.create(userData)
                .then( user => {
                    let token = jwt.sign(user.dataValues,process.env.SECRET_KEY,{
                        expiresIn:1440
                    })
                    res.json({ token : token })
                })
                .catch( err=>{
                    res.send('error 50555' + error)
                })
            }else{
                res.json({ error:'User already exists!' })
            }  
            })
        .catch(err=>{
            res.send('error:' + err)
        })
})

//login- ***Error is somewhere here in login section***
users.post('/login1',res) => {
    User.findOne({
        where: {
            email : req.body.email
        }
    })
    .then(user => {
        if(bcrypt.compareSync(" " + req.body.password,user.password)) {
            let token = jwt.sign(user.dataValues,{
                expiresIn: 1440
            })
            res.json({ token: token })
        }else{
            res.send('User does not exist!')
        }
    })
  
})

module.exports = users

model / User.js

const Sequelize = require('sequelize')
const db = require('../database/db.js')

module.exports = db.sequelize.define(
    'user',{
        id: {
            type: Sequelize.INTEGER,primaryKey: true,autoIncrement: true
        },first_name: {
            type: Sequelize.STRING
        },last_name: {
            type: Sequelize.STRING
        },email: {
            type: Sequelize.STRING
        },password: {
            type: Sequelize.STRING
        }
    },{
        timestamps: false
    }
)
    

代码中的确切错误是什么?

很高兴,如果有人可以帮助我。 我是bcrypt和hash的新手。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)