如何解决:Nodejs passport.header问题,req.session.passport未定义

我目前在我的发展服务器有这个错误。 这发生在login尝试:

这是护照的具体问题。 请帮忙,这在生产服务器上工作得很好

我有我的app.js

app.use(cookieParser('12345678')); app.use(session({ secret: '12345678', resave: false, saveUninitialized: true })); app.use(validator()); app.use(passport.initialize()); app.use(passport.session()); app.use(flash()); // flash - Initializing app.use(compression()); app.use('/app', express.static(path.join(__dirname, '/app'), { maxAge: 7 * 86400000 })); app.use('/uploads', express.static(path.join(__dirname, '/uploads'), { maxAge: 7 * 86400000 })); app.set('view engine', 'pug'); app.locals.pretty = false; app.set('views', './views'); app.use(function (req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); 

然后在auth方法中

 module.exports = function (passport) { passport.serializeUser(function (user, done) { done(null, user); }); passport.deserializeUser(function (user, done) { done(null, { id: user.id }); }); passport.use('site-register', new LocalStrategy({ usernameField: 'email', passwordField: 'pwd', passReqToCallback: true // allows us to pass back the entire request to the callback }, function (req, email, pwd, done) { process.nextTick(function () { if( condition is ok){ return done(null, user, { message: 'Login Success' }); }else{ return done(null, false, { message: 'Invalid Login, Please try another method to login' }); } )); ..... } 

那么问题是:

 embah@devsertwo:~/node/nodeapp$ node app Server turned on with development mode on port 3002 /home/embah/node/nodeapp/routes/auth.js:384 req.session.passport.header = authHeader; ^ TypeError: Cannot set property 'header' of undefined at /home/embah/node/nodeapp/routes/auth.js:384:65 at /home/embah/node/nodeapp/controller/adaptor/mongodb.js:31:9 at Query.<anonymous> (/home/embah/node/nodeapp/node_modules/mongoose/lib/quer y.js:2180:28) at /home/embah/node/nodeapp/node_modules/kareem/index.js:177:19 at /home/embah/node/nodeapp/node_modules/kareem/index.js:109:16 at _combinedTickCallback (internal/process/next_tick.js:67:7) at process._tickCallback (internal/process/next_tick.js:98:9) embah@devsertwo:~/node/nodeapp$ Write failed: Connection reset by peer 

console.log(req.session)返回如下

 Session { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true } } 

似乎从未添加护照

事实上,相同的代码在一个环境,但不是另一个导致我相信这是一个环境或configuration问题。

也许在生产和开发上有些不同的软件包版本是不兼容的? 尝试更新所有的依赖关系,看看是否有任何改变。

有时候,改变中间件的顺序也可以有帮助。

这意味着您的“node_modules”文件夹不会在开发中更新。 删除整个文件夹并再次运行“npm i”(或者如果需要,使用sudo)。

尝试在主代码本身包括护照authentication,而不是导出它。 这将隔离path问题。 如果这给出相同的错误,请尝试重新安装passportjs。