Node.js 错误:登录中的数据和哈希必须是字符串
我和邮递员检查了我的代码,它给出了这个错误 (节点: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标志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 在
--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