Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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_Bcrypt - Fatal编程技术网

Javascript bcrypt错误:需要数据和散列参数

Javascript bcrypt错误:需要数据和散列参数,javascript,bcrypt,Javascript,Bcrypt,我收到一个bcrypt错误,指出需要数据和散列参数,引用了routes.js文件中的第44行。据我所知,我正在传递这些信息:bcrypt.compare的第一个参数是用户输入的密码,第二个是从数据库检索的哈希密码。我做错了什么 bcrypt.compare(req.params.password, user.password, function... routes.js 'use strict' var express = require('express'); var router = e

我收到一个bcrypt错误,指出需要数据和散列参数,引用了routes.js文件中的第44行。据我所知,我正在传递这些信息:bcrypt.compare的第一个参数是用户输入的密码,第二个是从数据库检索的哈希密码。我做错了什么

bcrypt.compare(req.params.password, user.password, function...
routes.js

'use strict'

var express = require('express');
var router = express.Router();
var User = require('../app/models/user');
//password hashing
var bcrypt = require('bcrypt');

var count = 0;

router.use(function(req, res, next) {
    count++;
    console.log('API hit count = %s', count);
    next();
});

// /users post(create new user) get(specific user)
router.route('/users')
    .post(function(req,res) {
        var user = new User();
        user.username = req.body.username;
        user.password = bcrypt.hashSync(req.body.password, 10);

        //save the user and checkfor errors
        user.save(function(err) {
            if (err) {
                res.send(err);
            } else {
                res.json({message: "User created!"});
            }    
        });

    })

router.route('/users/:username')
    .get(function(req, res) {
        var query = {
            username: req.params.username,
        };
        User.findOne(query, function(err, user) {
            if (err) { 
                res.send(err);
            } else {
                bcrypt.compare(req.params.password, user.password, function(err, res) {
                    if(err) {
                        console.log('Comparison error: ', err);
                    }
                })
                res.json(user);
            }
        });
    })

bcrypt.compare
取3个参数;passwordToCheck、passwordHash和回调

此错误表示前2个参数中的一个或两个为null或未定义。因此,请确保这两个选项都正确通过。(不是空的或未定义的)

我使用了

const user = await User.find({email: req.body.email}) //which returned all users
//除非引用索引0中的第一个用户,否则无法将user.password传递给//bcrypt compare方法,因为它不是字符串 我把它改成了

await User.findOne({email: req.body.email})//from which i can use user.password in the //bcrypt compare method

我也有同样的错误,问题是调用从数据库读取的函数时缺少
wait

const passwordMatch = await bcrypt.compare(password, user.password);

确保您提供的是原始密码和散列密码。这将返回一个布尔值。

我遇到了同样的问题,但我使用了bycrypt.compare()的同步形式,即bcrypt.compareSync(),因此我将其更改为bcrypt.compare()在调用
bcrypt.compare
之前设置一个断点,看看
req.params.password
user.password
是什么。@bejado Dammit,我的app.js中有一个错误,发送了一个未定义的密码。感谢您的帮助。当您使用
arrow函数
语法而不是正常的
function()
语法时,也会发生这种情况。因此,如果您想保留来自模型的
这个
,也就是说,当从当前模式中提取某些内容时,请确保使用后一种语法。这救了我一天。谢谢