Estoy tratando de obtener acceso a la contraseña almacenada en la instancia de usuario usando la palabra clave this y no funciona.
Aquí está el código cuando lo estoy llamando.
Users.find({where: {$or: [{ email: email} ,{ username: username }]}}) .then(user => { if (!user) return res.status(401).send(new errors.Unauthorized('Email/Username or Password Not Found!')); user.authenticate(password, (err, match) => { if (err) return res.status(401).send(err); res.send(user); }); }) .catch(err => res.send(err));Aquí está el código para mi método de instancia.
instanceMethods :{ authenticate: (password, cb) => { return bcrypt.compare(password, this.password, (err, match) => { if (err) return cb(new errors.Unauthorized()); return cb(null, match); }); } }Utiliza la función de flecha, que no permite vincular this a través de call() o apply() . Ver MDN :
Dado que esto no está vinculado a las funciones de flecha, los métodos call() o apply() solo pueden pasar parámetros. esto se ignora.
Y además,
Como se indicó anteriormente, las expresiones de función de flecha son más adecuadas para funciones que no son métodos...
Vea este problema de github también https://github.com/sequelize/sequelize/issues/5858
No hay forma de anular el alcance de las funciones de flecha, esa es una de sus características principales. Así que no hay nada que podamos hacer aquí.