Express Passportjs_userproperty未定义

Express Passportjs_userproperty未定义,express,passport.js,Express,Passport.js,我正在使用Express+Passport建立一个带有登录和注册的网站。它一直运行良好,但最近出现了一个错误。当我试图调用Middleware Passport应该提供的req.login或req.logout时,就会出现这种情况 TypeError: Cannot read property '_userProperty' of undefined at IncomingMessage.req.logout.req.logOut (D:\Workspace\Github\fyp-web

我正在使用Express+Passport建立一个带有登录和注册的网站。它一直运行良好,但最近出现了一个错误。当我试图调用Middleware Passport应该提供的req.login或req.logout时,就会出现这种情况

TypeError: Cannot read property '_userProperty' of undefined
    at IncomingMessage.req.logout.req.logOut (D:\Workspace\Github\fyp-web\node_modules\passport-local\node_modules\passport-oauth\node_modules\passport\lib\passport\http\request.js:62:41)
    at D:\Workspace\Github\fyp-web\routes\user.js:29:7
    at callbacks (D:\Workspace\Github\fyp-web\node_modules\express\lib\router\index.js:161:37)
    at param (D:\Workspace\Github\fyp-web\node_modules\express\lib\router\index.js:135:11)
    at pass (D:\Workspace\Github\fyp-web\node_modules\express\lib\router\index.js:142:5)
    at Router._dispatch (D:\Workspace\Github\fyp-web\node_modules\express\lib\router\index.js:170:5)
    at Object.router (D:\Workspace\Github\fyp-web\node_modules\express\lib\router\index.js:33:10)
    at next (D:\Workspace\Github\fyp-web\node_modules\express\node_modules\connect\lib\proto.js:190:15)
    at next (D:\Workspace\Github\fyp-web\node_modules\express\node_modules\connect\lib\proto.js:192:9)
    at Object.app.use.express.errorHandler.dumpExceptions [as handle] (D:\Workspace\Github\fyp-web\app.js:143:3)
下面是图书馆里出错的那一行:

req.logIn = function(user, options, done) {
  .....
  var property = this._passport.instance._userProperty || 'user';
我相信我已经正确配置了中间件、策略和路由部分,因为上次没有错误。但为了安全起见,我将在此处附加这些代码片段:

//in app.js
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.cookieParser(env.server_secret));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.json());
app.use(express.urlencoded());
app.use(express.session({ secret:env.server_secret,cookie: { maxAge: 60000 * 60 * 24 }}));
app.use(passport.initialize());
app.use(passport.session());

//in config_passport.js
/* Local strategy */
passport.use(new LocalStrategy(
{
  usernameField: 'email',
  passwordField: 'password'
},
function(email, password, done) {
  Users.isValidUserPassword(email, password, done);
}
));

好吧,我自己解决

问题是我在app.js中执行此操作造成的:

//app.js
req._passport = passport;
我想通过将passport实例附加到所有请求来传递它。这给我带来了麻烦,因为passport本身正在使用“\u passport”。如果查看出错的代码,您将看到:

//request.js in passport node_module/passport/lib/http/request.js 
var property = 'user';
if (this._passport && this._passport.instance) {
  property = this._passport.instance._userProperty || 'user';
}
所以我有点重写了护照的密码。这就是为什么“本护照”没有定义

希望这能帮助其他遇到同样问题的人