Метод схемы Mongoose, проверяющий пароль по переданному вводу - PullRequest
0 голосов
/ 04 ноября 2018

У меня проблемы с пониманием того, как использовать пароль сравнения в схеме mongoose Person. У меня есть путь входа, который извлекает одну запись на основе совпадения по электронной почте.

var Person = require('../models/person.js');

exports.login = function (req, res) {
    const email = req.body.email;
    Person.findOne({ email }, function (err, user) {
        if(err){
            res.status(501).send(error);
        }
        if(!user){
            res.status(401);
        }
        if(user){
            console.log(typeof user)
           // const test = new Person(user);
            user.comparePassword(req.body.password, (err, isMatch) => {
  
            });

        }
    })
}

personSchema.methods.comparePassword = function(password, done) {
  bcrypt.compare(password, this.password, function(err, isMatch) {
    done(err, isMatch);
  });
};

Я пытаюсь вызвать метод comparePassword, но this.password ниже нуля - это схема для Person.

var personSchema = new Schema({
  first       :   {type: String, required: 'FirstNameInvalid'},
  last        :   String,
  email       :   {type: String, unique: true, lowercase: true, required: 'EmailInvalid'},
  password    :   {type: String, select: false, required: 'PasswordInvalid'}
});

1 Ответ

0 голосов
/ 04 ноября 2018

Вы можете переопределить select: false только тогда, когда вы нажмете маршрут входа с помощью select()

exports.login = function (req, res) {
    const email = req.body.email;
    Person.findOne({ email })
        .select('password')
        .exec(function (err, user) {
            if(err){
                res.status(501).send(error);
            }
            if(!user){
                res.status(401);
            }
            if(user){
                console.log(typeof user)
                user.comparePassword(req.body.password, (err, isMatch) => {

                });

            }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...