2016-08-20 1 views
0

Моя модель выглядит так, но когда я пытаюсь использовать verifyPassword, он говорит TypeError: user.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); 
      }); 
     }); 
     } 
)); 
+0

Можете ли вы предоставить код для пользователя? Кажется, что он не имеет метода 'verifyPassword'. –

ответ

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)); 
}; 
+0

User.verifyPassword не является функцией, по-прежнему отображается ошибка –

+0

показать свою модель –

0

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

npm install 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); 
    }); 
0

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

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

Смежные вопросы