You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Passport时报Cannot read property 'passport' of undefined如何解决

报错原因
  • 未注册express-session中间件:你仅在app.js中导入了express-session依赖,但没有完成中间件注册。Passport的会话管理功能完全依赖express-session提供的会话对象支撑,缺少该中间件会导致Passport读取不到会话存储,触发属性读取失败错误。
  • 中间件顺序错误:即使你后续注册了express-session,也需要保证该中间件的注册顺序在passport.initialize()、passport.session()之前,否则Passport依然无法正常获取到会话信息。
解决方案

修改app.js的中间件注册逻辑,补充express-session配置并调整顺序,参考修改后的代码片段:

const express = require('express');
const morgan = require('morgan');
const path = require('path');
const app = express();
require('./lib/passport.js')

const mysql = require('mysql');
const myConnection = require('express-myconnection');
const session = require("express-session");
const passport = require('passport');

// settings
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.urlencoded({extended: false}));
app.use(express.json());

// 新增:注册express-session中间件,必须放在Passport相关中间件之前
app.use(session({
  secret: '自定义你的会话加密密钥,生产环境请存入环境变量不要硬编码',
  resave: false,
  saveUninitialized: false
}))

// Passport中间件注册要放在express-session之后
app.use(passport.initialize());
app.use(passport.session());

// 其余原有逻辑保持不变
app.use(morgan('dev'));
app.use(require('./routes'));
app.use(express.static(path.join(__dirname, 'public')));

app.listen(app.get('port'), () => {
  console.log('Server on port', app.get('port'));
});

如果完成上述修改后仍有报错,可检查./lib/passport.js中是否正确注册了local.signup策略,以及是否完成了passport.serializeUser、passport.deserializeUser的序列化逻辑配置。

内容的提问来源于stack exchange,提问作者Zerimex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:54:04