web-dev-qa-db-fra.com

Erreur bcrypt: données et arguments de hachage requis

Je reçois une erreur bcrypt indiquant que des données et des arguments de hachage sont requis, référençant la ligne # 44 dans mon fichier routes.js. D'après ce que je peux dire, je transmets ces informations: le premier paramètre à bcrypt.compare est le mot de passe entré par l'utilisateur, et le second est le mot de passe haché récupéré à partir de la base de données. Qu'est-ce que je fais mal?

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 prend 3 paramètres; passwordToCheck, passwordHash et un rappel, respectivement. (Consultez la documentation pour des exemples)

Cette erreur signifie que l'un des deux premiers paramètres ou les deux sont nuls ou non définis. Par conséquent, assurez-vous que les deux sont transmis correctement. (Pas aussi nul ou non défini)

14
sapy

J'ai utilisé

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

// et sauf si je référence le premier utilisateur dans l'index 0, je ne peux pas passer user.password à la // méthode de comparaison bcrypt parce que ce n'est pas une chaîne dans laquelle je l'ai changé

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