Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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
Javascript 由于未知的bcrypt问题,登录时出错_Javascript_Node.js_Bcrypt_Mern - Fatal编程技术网

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.log
req.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