2017-03-05 27 views
0

我知道這個問題已經被問過,但我無法找到一個合適的回答。 這是控制檯錯誤。護照扔user.authenticate不是一個函數

TypeError: user.authenticate is not a function 
at /home/sinnedde/WebstormProjects/web-services/config/strategies/local.js:24:23 

這裏是local.js用來檢查用戶名和密碼是否正確。

var passport = require('passport'), 
LocalStrategy = require('passport-local').Strategy, 
User = require('mongoose').model('User'); 

module.exports = function() { 
passport.use(new LocalStrategy(function (username, password, done) { 
    User.findOne({ 
     username: username 
    }, function (err, user) { 
     if (err) { 
      return done(err); 
     } 
     if (!user) { 
      return done(null, false, { 
       message: 'Invalid Username or Password' 
      }); 
     } 
     if (!user.authenticate(password)) { 
      return done(null, false, { 
       message: 'Invalid Username or Password' 
      }); 
     } 
     return done(null, user); 
    }); 
})); 
}; 

這裏是控制器中的登錄方法。

exports.signin = function (req, res, next) { 
passport.authenticate('local', function (err, user, info) { 
    if (err || !user) { 
     res.send(info); 
    } else { 
     res.json({ 
      status: 'true', 
      message: 'Logged In' 
     }); 
    } 
})(req, res, next); 
}; 

我通過郵遞員發送請求。如果用戶名無效,我會得到正確的回覆,但如果密碼無效,則會出現上述錯誤。我不知道什麼是錯的。請幫忙。

回答

1

你的貓鼬模型中沒有身份驗證方法,但你可以把它添加到您的模式。

示例代碼:

var mongoose = require('mongoose'), 
    Schema = mongoose.Schema; 


var UserSchema = new Schema ({ 
    ... 
}); 


UserSchema.methods.authenticate = function(password) { 
    //implementation code goes here 
} 

mongoose.model('User', UserSchema); 
module.exports = mongoose.model('User'); 

或者你可以使用Mongoose passport plugin

+0

謝謝。但是,我正在使用護照的本地策略來驗證登錄。我以前做過,沒有問題。但現在我正在得到這個。代碼有問題嗎? –

+0

也許看看這個鏈接http://mherman.org/blog/2015/01/31/local-authentication-with-passport-and-express-4/#.WLxOrhIrJ60 – hya

+0

我試圖貓鼬護照插件。但它拋出一個新的錯誤' 'CB' 是不是一個function' –

1

我得到了同樣的錯誤。在我來說,我忘了補充userSchema.plugin(passportLocalMongoose);不要忘記NPM安裝 passport-local-mongoose包。我希望這能幫到您。謝謝