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