Node.js 类型错误:对象#<;策略>;没有方法';findByUsername';
我正在尝试使用Node.js 类型错误:对象#<;策略>;没有方法';findByUsername';,node.js,passport.js,Node.js,Passport.js,我正在尝试使用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
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#没有方法“findByUsername”
我不熟悉Javascript(和node.js),但我做了一些搜索,我认为我正确地使用了构造函数模式
那么为什么将此
设置为策略的一个实例,而不是用户的一个实例呢?
passport.use(new LocalStrategy(users.verify));
您正在将函数传递给LocalStrategy,LocalStrategy会更改其上下文(函数是JavaScript中的头等公民)<代码>此
不再指向用户对象,而是指向策略。因此,您需要将函数绑定到用户上下文
有点胡乱猜测的建议:
Users.prototype.verify = function(username, password, done) {
this.findByUsername(username, function(err, user) {
done(null, user);
});
}.bind(Users.prototype);
用“新的LocalStrategy(users.verify.bind(users))”解决了这个问题