Erreur: les données et le sel arguments requis
Je suis en train d'enregistrer un utilisateur de la base de données mongodb à l'aide d'une requête post à suivre, mais j'ai obtenu l'erreur bcrypt Erreur: les données de hachage et les arguments requis .Il est assez simple de mise en place du code, mais je ne peux pas comprendre quelque chose de mal avec elle.
models/users.js
JS:
const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const confic = require('../models/users');
//User schema
const UserSchema = mongoose.Schema({
name: {
type: String,
},
email: {
type: String,
required: true
},
username:{
type: String,
required: true
},
password: {
type: String,
required: true
}
});
const User = module.exports = mongoose.model('User', UserSchema);
module.exports.getUserById = function(id,callback){
User.findById(id,callback);
}
module.exports.getUserByUsername = function(username,callback){
const query = {username:username}
User.findOne(query,callback);
}
module.exports.addUser= function (newUser, callback) {
bcrypt.genSalt(10,(err,salt) => {
bcrypt.hash(newUser.password, salt , (err, hash) =>{
if(err) throw (err);
newUser.password=hash;
newUser.save(callback);
});
});
}
routes/users.js
JS:
const jwt = require('jsonwebtoken');
User = require('../models/users')
////Register
router.post('/register', (req, res, next) => {
var newUser = new User({
name: req.body.name,
email: req.body.email,
username: req.body.username,
password: req.body.password
});
User.addUser(newUser, (err, User) => {
if(err){
//res.json({success: false, msg:'Failed to register user'});
} else {
//res.json({success: true, msg:'User registered'});
}
});
});
//Authenticate
router.post('/authenticate', (req, res, next) => {
res.send('AUTHENTICATE');
});
//Profile
router.get('/profile', (req, res, next) => {
res.send('PROFILE');
});
module.exports = router;
Le serveur fonctionne, mais après l'utilisation de facteur de chrome post de demande d'erreur sont affichés et le serveur d'arrêt de travail que les erreurs affichées dans l'image.
- Avez-vous vérifié le contenu de la demande de l'organisme au moment de la demande?
- ( "nom":"abc", "email":"[email protected]", "nom":"abcd", "mot de passe":"12345" )
- ce que l'ont envoyé dans le corps
- Pouvez-vous confirmer que l'enregistrement de l'Utilisateur générée a le champ mot de passe défini au moment de la commande addUser fonction est invoquée? Vous pouvez connecter le contenu du champ de mot de passe, soit en avant ou à la commande addUser fonction.
- Pouvez-vous journal
newUser
avant d'appelerbcrypt.genSalt
dans votreUser
module s'il vous plaît ? - je ne comprends pas comment faire ** boehm_s**
Vous devez vous connecter pour publier un commentaire.
L'erreur vient de la
bcrypt.hash
méthode.Dans votre cas, vous avez le morceau de code suivant :
Je pense que votre problème vient de la
newUser.password
qui doit être vide (null
ouundefined
). Le message d'erreur indiquedata and salt arguments required
. Il ressemble au votre, le sel est correctement généré et vous n'avez pas de vérifier sinewUser.password === undefined
, donc voici mon pari : d'une certaine façonnewUser.password
est pas défini.Vous pouvez aussi vérifier si la
genSalt
méthode fonctionne très bien en ajoutantif(err) throw (err);
après l'appel que vous avez fait pour labcrypt.hash
méthode.Espérons que cela aide,
En ce qui concerne meilleur
newUser
avant de générer le sel ?newUser.password
a une valeur ou si elle estundefined
. Puis, si c'estundefined
, l'erreur vient de la données en cours avant d'arriver icinewUser
juste après sa création, pour voir sinewUser.password
est pas définie en ce momentif(err) throw (err)
, il s'arrête à cause de labcrypt.hash
fonction. Pouvez-vous journalnewUser
avant cette ligne :User.addUser(newUser, (err, User) => { ... }
Supprimer la flèche
=>
dans bcrypt.hash() . Utiliser l'ancienne définition de la méthode defunction() {}
Par mangouste docs: https://mongoosejs.com/docs/faq.html
Q. je suis à l'aide d'une flèche pour une fonction virtuelle, le middleware, les getter/setter, ou de la méthode et de la valeur de ce qui est mal.
A. Flèche fonctions de gérer le mot-clé this très différemment que les fonctions. Mangouste getters/setters dépendent afin de vous donner accès au document que vous avez écrit, mais cette fonctionnalité ne fonctionne pas avec une flèche fonctions. N'utilisez pas de flèche fonctions pour la mangouste des getters/setters, à moins que n'ont pas l'intention d'accéder au document dans le getter/setter.