J'exécute un projet sur MEAN.js et j'ai un problème suivant. Je veux faire un calcul de profil d'utilisateur et l'enregistrer dans la base de données. Mais il y a un problème avec la méthode dans le modèle des utilisateurs:
UserSchema.pre('save', function(next) {
if (this.password && this.password.length > 6) {
this.salt = new Buffer(crypto.randomBytes(16).toString('base64'), 'base64');
this.password = this.hashPassword(this.password);
}
next();
});
Si j'envoie un mot de passe avec mes modifications, il modifiera les informations d'identification, donc l'utilisateur ne pourra pas se connecter la prochaine fois. Je veux supprimer le mot de passe de l'objet utilisateur avant de l'enregistrer, mais je ne suis pas en mesure de le faire (regardons les commentaires dans mon code ci-dessous):
exports.signin = function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err || !user) {
res.status(400).send(info);
} else {
/* Some calculations and user's object changes */
req.login(user, function(err) {
if(err) {
res.status(400).send(err);
} else {
console.log(delete user.password); // returns true
console.log(user.password); // still returns password :(
//user.save();
//res.json(user);
}
});
}
})(req, res, next);
};
Qu'est-ce qui ne va pas? Pourquoi la méthode delete renvoie true, mais rien ne se passe? Merci de votre aide :)
il y a certaines règles pour supprimer l'opérateur en javascript
par exemple
x = 42; // creates the property x on the global object
var y = 43; // creates the property y on the global object, and marks it as non-configurable
// x is a property of the global object and can be deleted
delete x; // returns true
// y is not configurable, so it cannot be deleted
delete y; // returns false
par exemple
function Foo(){}
Foo.prototype.bar = 42;
var foo = new Foo();
// returns true, but with no effect,
// since bar is an inherited property
delete foo.bar;
// logs 42, property still inherited
console.log(foo.bar);
donc, veuillez vérifier ces points et pour plus d'informations, vous pouvez lire ceci Lien
Faites juste:
user.password = undefined;
au lieu de:
delete user.password;
et la propriété de mot de passe n'apparaîtra pas à la sortie.
Eu un problème similaire. L'opérateur delete
"ne fonctionnait pas" lors de la tentative de suppression d'une propriété d'un objet dans un cas spécifique. Corrigé avec Lodash
unset
:
_.unset(user, "password");
https://lodash.com/docs/4.17.11#unset
Sinon, l'opérateur delete
fonctionne. Au cas où, delete
les documents de l'opérateur ici: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete