我正在尝试使用passport-local
,如下所示:
users.js:
var Users = function() {}
Users.prototype.findByUsername = function(username, cb) {
var user = { name: username };
cb(null, user);
};
Users.prototype.verify = function(username, password, done) {
this.findByUsername(username, function(err, user) {
done(null, user);
});
};
module.exports = Users;
在 app.js :
var Users = require('./users');
var users = new Users();
passport.use(new LocalStrategy(users.verify));
当我尝试登录时,我得到TypeError: Object #<Strategy> has no method 'findByUsername'
。
我是Javascript(和node.js)的新手,但我已经做了一些搜索,我认为我正在使用构造函数模式。
那么为什么this
设置为Strategy
的实例,而不是Users
的实例呢?
答案 0 :(得分:0)
在第
行passport.use(new LocalStrategy(users.verify));
您正在将该函数传递给LocalStrategy,后者更改了它的上下文(函数是JavaScript中的一等公民)。 this
不再指向User对象,而是指向策略。因此,您需要将您的函数绑定到Users上下文。
一些狂野的猜测建议:
Users.prototype.verify = function(username, password, done) {
this.findByUsername(username, function(err, user) {
done(null, user);
});
}.bind(Users.prototype);