Bcrypt错误:非法参数string未识别

这是我完整的代码

var express = require('express'), app = express(), mongoose = require('mongoose'), bodyParser = require('body-parser'), morgan = require('morgan'), webToken = require('jsonwebtoken'), bcrypt = require('bcryptjs'), assert = require('assert'); Schema = mongoose.Schema, secretKey = "omjdiuwkslxmshsoepdukslsj"; //User Schema var userSchema = new Schema({ username: {type: String, required: true, index: {unique:true}}, password: {type: String, required: true, select: false} }) userSchema.pre('save', function(next){ var user = this; if(!user.isModified('password')) return next(); bcrypt.hash(user.password, null, null, function(err, hash){ if(err) return next(err); user.password = hash; next(); }) }); userSchema.methods.comparePassword = function(password){ var user = this; bcrypt.compare(password, user.password, function(err, result){ if(err){ console.log(err); } else { console.log("passwords match!"); return; } }) } var userModel = mongoose.model('users', userSchema); //Connecting to Mongo mongoose.connect("mongodb://localhost/userstories", function(err){ if(err) { console.log(err); } else { console.log("Connected to database!"); } }); //Creating Token function createToken(user){ var token = webToken.sign({ _id: user.id, username: user.username }, secretKey,{ expiresIn: 30 * 60 * 1000 }) return token; } //Middlewares app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); app.use(morgan('dev')); //Api's app.post('/signup', function(req, res){ var user = new userModel({ username: req.body.username, password: req.body.password }) user.save(function(err){ if(err){ console.log(err); } else{ res.json({message: "User created!"}); } }) }) app.post('/login', function(req, res){ userModel.findOne({username: req.body.username}, function(err, user){ if(err) console.log(err); if(!user){ res.send("User not found!"); } else if(user){ var validPassword = user.comparePassword(req.body.password); if(validPassword){ var tokens = createToken(user); res.json({ success: true, message: "Successfully logged In", token: tokens }); } else { res.send("Invalid password"); } } }) }); //Running the server app.listen(3000, function(err){ if(err) console.log("port not working"); else{ console.log("Everything went just fine"); } }) 

我已经尝试了所有的方法,并看到了所有的答案。 但似乎没有人看到这个非法的论点错误。 请为我画这一个我确定有一个我不能看到的错误

我曾尝试相同的代码进行身份validation一次,并得到相同的错误Error: Illegal arguments: string, function

但是我没有看到代码的问题。 问题是,我注册了两个用户名和密码不同的用户。 然后,当我尝试使用用户名和一个密码login时,发生此错误并停止服务器。

所以看来你也面临同样的问题。 确保这个东西没有错误,如果你不想在你的代码中有一个错误。

当我使用bcrypt.compareSync("input to be compared with the hash", hash)时,我也遇到了同样的错误。

后来我发现我应该在第一个input参数(即生成哈希的实际值)和第二个input参数中的哈希中传递实际值,但是我在两个input参数中都传递了哈希值。

纠正后,它给了我所需的输出为真或假。

你也可以在这里运行并检查你的代码。