web-dev-qa-db-ja.com

bcryptエラー:データとハッシュの引数が必要です

データとハッシュ引数が必要であることを示すbcryptエラーが発生し、routes.jsファイルの44行目を参照しています。私が知ることができることから、私はその情報を渡しています:bcrypt.compareの最初のパラメーターはユーザーが入力したパスワードで、2番目のパラメーターはデータベースから取得したハッシュ化されたパスワードです。何が悪いのですか?

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);
            }
        });
    })
8
johnny_mac

bcrypt.compareは3つのパラメーターを取ります。 passwordToCheck、passwordHash、およびコールバック。 (例についてはドキュメントを確認してください)

このエラーは、最初の2つのパラメーターの一方または両方がnullまたは未定義のいずれかであることを意味します。したがって、両方が正しく渡されることを確認してください。 (nullまたは未定義ではない)

14
sapy

使った

const user = await User.find({email: req.body.email}) //which returned all users

//インデックス0の最初のユーザーを参照しない限り、user.passwordを// bcrypt比較メソッドに渡すことはできません。これは、変更した文字列ではないためです。

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