TypeError: user.verifyPassword не является функцией

node.js passport.js

1939 просмотра

3 ответа

Моя модель выглядит следующим образом, но когда я пытаюсь использовать verifyPassword, он говорит, что TypeError: user.verifyPassword не является функцией

var passport = require('passport');
var BasicStrategy = require('passport-http').BasicStrategy;
var User = require('../models/user');

passport.use(new BasicStrategy(
      function(username, password, callback) {
        User.findOne({ username: username }, function (err, user) {
          if (err) { return callback(err); }

          // No user found with that username
          if (!user) { return callback(null, false); }

          // Make sure the password is correct
          // Error comind at this point
          user.verifyPassword(password, function(err, isMatch) {
            if (err) { return callback(err); }

            // Password did not match
            if (!isMatch) { return callback(null, false); }

            // Success scenario
            return callback(null, user);
          });
        });
      }
));
Автор: Kabya Singh Источник Размещён: 08.11.2019 11:19

Ответы (3)


1 плюс

Я знаю, что опоздал, но вы можете сделать что-то вроде этого,

passport.use(
    'local',
    new LocalStrategy(function(username, password, done) {
        console.log('HAKSKAJS');
        User.findOne({ username: username }, function(err, user) {
            if (err) {
                return done(err);
            }
            if (!user) {
                return done(null, false);
            }
            if (user.password != password) {
                return done(null, false);
            }
            return done(null, user);
        });
    })
);

Ссылка: https://github.com/sikandar114/node-auth-pass-local/blob/master/config/passport.js

Автор: Mohhamad Hasham Размещён: 04.03.2018 02:40

0 плюса

Попробуйте использовать функцию User.verifyPassword

Но для более правильного ответа покажите свою модель пользователя

Вы должны иметь в своей пользовательской схеме что-то вроде:

// I am use bctypt, but you need your comparer function
userSchema.methods.verifyPassword = function(password, callback) {
  callback(err, bcrypt.compareSync(password, this.password));
};
Автор: Denis Shiryaev Размещён: 20.08.2016 12:50

0 плюса

Так как данные отправляются почтовым методом, экспресс не может анализировать данные, потому что промежуточное ПО body-parser было исключено из экспресса из-за некоторых проблем. Следовательно, вы должны добавить его вручную. Импортируйте body-parser:

npm установить body-parser

Добавьте эти строки в ваш код.

    app.use(bodyParser.urlencoded({ extended: false })); 
    app.use(passport.initialize());

Также определите эти 2 функции.

    passport.serializeUser(function(user, done) {
        done(null, user); 
    });

    passport.deserializeUser(function(user, done) {
        done(null, user); 
    });
Автор: Edison D'souza Размещён: 20.09.2016 10:02
Вопросы из категории :
32x32