Javascript 由于未知的bcrypt问题,登录时出错
我正在使用Javascript 由于未知的bcrypt问题,登录时出错,javascript,node.js,bcrypt,mern,Javascript,Node.js,Bcrypt,Mern,我正在使用nodejs和mongodb进行后端工作。在编码身份验证部分后,我遇到了未知问题,我认为这是来自bcrypt:( 请看一下我的代码 用户型号代码- const mongoose = require("mongoose"); const bcrypt = require("bcrypt"); const jwt = require("jsonwebtoken"); const validator = require("
nodejs和mongodb
进行后端工作。在编码身份验证
部分后,我遇到了未知问题,我认为这是来自bcrypt
:(
请看一下我的代码
用户型号代码-
const mongoose = require("mongoose");
const bcrypt = require("bcrypt");
const jwt = require("jsonwebtoken");
const validator = require("validator");
require("dotenv").config();
const userSchema = mongoose.Schema(
{
email: {
type: String,
required: true,
unique: true,
trim: true,
lowercase: true,
validate(value) {
if (!validator.isEmail) {
throw new Error("Invalid Email");
}
},
},
password: {
type: String,
required: true,
trim: true,
},
role: {
type: String,
enum: ["user", "admin"],
default: "user",
},
name: {
type: String,
required: true,
maxlength: 21,
},
phone: {
required: true,
type: Number,
maxlength: 12,
},
},
{
timestamps: true,
},
);
userSchema.pre("save", async function (next) {
if (this.isModified("password")) {
// hash the password
const salt = await bcrypt.genSalt(10);
const hash = await bcrypt.hash(this.password, salt);
this.password = hash;
}
next();
});
userSchema.methods.generateToken = function () {
const userObj = { id: this._id.toHexString(), email: this.email };
const token = jwt.sign(userObj, process.env.DB_SECRET, {
expiresIn: "3d",
});
return token;
};
userSchema.statics.emailTaken = async function (email) {
const user = await this.findOne({ email });
return !!user;
};
const User = mongoose.model("User", userSchema);
module.exports = {
User,
};
用户API代码(请避免使用这些控制台日志语句,因为我添加它们是为了调试目的)-
控制台日志-
listening on port 3001
Database Connected
Finding User........
Comparing password with bcrypt
Error
我发现代码在const match=await bcrypt.compare(req.body.password,user.password);
此行之前成功执行
在console.log(error.message);
-
Error: data and hash arguments required
at Object.compare (D:\CovidHelpers\CovidHelpers\node_modules\bcrypt\bcrypt.js:208:17)
at D:\CovidHelpers\CovidHelpers\node_modules\bcrypt\promises.js:29:12
at new Promise (<anonymous>)
at Object.module.exports.promise (D:\CovidHelpers\CovidHelpers\node_modules\bcrypt\promises.js:20:12)
at Object.compare (D:\CovidHelpers\CovidHelpers\node_modules\bcrypt\bcrypt.js:204:25)
at D:\CovidHelpers\CovidHelpers\server\routes\api\users.js:60:32
at processTicksAndRejections (internal/process/task_queues.js:93:5)
data and hash arguments required
错误:需要数据和散列参数
在Object.compare(D:\CovidHelpers\CovidHelpers\node\u modules\bcrypt\bcrypt.js:208:17)
位于D:\CovidHelpers\CovidHelpers\node\u modules\bcrypt\promises.js:29:12
在新的承诺()
在Object.module.exports.promise(D:\CovidHelpers\CovidHelpers\node\u modules\bcrypt\promises.js:20:12)
在Object.compare(D:\CovidHelpers\CovidHelpers\node\u modules\bcrypt\bcrypt.js:204:25)
位于D:\CovidHelpers\CovidHelpers\server\routes\api\users.js:60:32
在处理和拒绝时(内部/process/task_queues.js:93:5)
需要数据和散列参数
请帮我解决这个:)
谢谢您应该打印错误以了解错误是什么。在catch中,执行
console.log(error.message)
。我们无法在不知道错误说明的情况下帮助您。请刷新此页面:)请使用findOne方法查找电子邮件中的用户,很可能是缺少用户密码或req.body.password,您可以为我或用户登录用户密码吗?console.logreq.body.password
和user.password
并确保它们不等于未定义或空!!!!!!为愚蠢的错误道歉:(是的,我应该写findOne,这样它会返回一个对象。谢谢你们!
Error: data and hash arguments required
at Object.compare (D:\CovidHelpers\CovidHelpers\node_modules\bcrypt\bcrypt.js:208:17)
at D:\CovidHelpers\CovidHelpers\node_modules\bcrypt\promises.js:29:12
at new Promise (<anonymous>)
at Object.module.exports.promise (D:\CovidHelpers\CovidHelpers\node_modules\bcrypt\promises.js:20:12)
at Object.compare (D:\CovidHelpers\CovidHelpers\node_modules\bcrypt\bcrypt.js:204:25)
at D:\CovidHelpers\CovidHelpers\server\routes\api\users.js:60:32
at processTicksAndRejections (internal/process/task_queues.js:93:5)
data and hash arguments required