Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 错误:登录中的数据和哈希必须是字符串_Node.js_Hash_Bcrypt - Fatal编程技术网

Node.js 错误:登录中的数据和哈希必须是字符串

Node.js 错误:登录中的数据和哈希必须是字符串,node.js,hash,bcrypt,Node.js,Hash,Bcrypt,我和邮递员检查了我的代码,它给出了这个错误 (节点:6548)未处理的PromisejectionWarning:错误:数据和哈希必须是字符串 在Object.compareSync(H:\Chale\Angular Projects\mean mysql login reg\node\u modules\bcrypt\bcrypt.js:170:15) 在H:\Chale\Angular Projects\mean mysql login reg\routes\Users.js:58:19 在

我和邮递员检查了我的代码,它给出了这个错误

(节点:6548)未处理的PromisejectionWarning:错误:数据和哈希必须是字符串 在Object.compareSync(H:\Chale\Angular Projects\mean mysql login reg\node\u modules\bcrypt\bcrypt.js:170:15) 在H:\Chale\Angular Projects\mean mysql login reg\routes\Users.js:58:19 在处理和拒绝时(内部/process/task_queues.js:97:5) (节点:6548)未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。要在未处理的承诺拒绝时终止节点进程,请使用CLI标志
--unhandled rejections=strict
(请参阅)。(拒绝id:1) (节点:6548)[DEP0018]弃用警告:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将使用非零退出代码终止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', (req, res) => {
    User.findOne({
        where: {
            email : req.body.email
        }
    })
    .then(user => {
        if(bcrypt.compareSync(" " + req.body.password, user.password)) {
            let token = jwt.sign(user.dataValues, process.env.SECRET_KEY, {
                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。

你能在
行设置一个断点吗?如果(bcrypt.compareSync(“+req.body.password,user.password))
并查看
req.body.password
user.password
。@Anatoly我试过,但还是一样。错误:数据和哈希必须是字符串这意味着您尝试了它吗?你看到了什么值?@Anatoly我像你说的那样编辑代码并运行。类似于if(bcrypt.compareSync(“+req.body.password,user.password))。这不是你说的吗?我是这样想的,怎么会这样?我怀疑这就是错误的根源。您可以尝试将
user.password
转换为字符串以传递给
bcrypt.compareSync