【发布时间】:2015-10-28 05:47:39
【问题描述】:
Google 了很长时间,到目前为止还没有真正找到任何有效的方法,所以我想在这里问一下。
我正在尝试让会话与 Passport 一起使用。我已经完成了注册和登录功能,这似乎可以正常工作。
主要问题是 req.isAuthenticated 总是返回 false。 我已经尝试了通常的方法:
确保 app.use(passport.session()) 出现在 express-session 配置之后:
...
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(session({
secret: 'somethingsomethingdarkside',
cookie: { maxAge: 1209600000 },
saveUninitialized: false,
resave: false,
// using store session on MongoDB using express-session + connect
store: new MongoStore({
url: configDB.url,
collection: 'sessions'
})
}));
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
...
我已经进入 Passports request.js 文件,并进行了一些调试,我可以看到
this[property/*user*/] = user;
设置我想要的值,我认为它应该。
现在,每当我打电话时
if (req.isAuthenticated())
结果
this[property/*user*/] == undefined
返回错误。我还输入了一条日志消息,告诉我模块何时初始化,并且只在服务器启动时执行一次。
据我所知,user.deserializeUser 也从未被调用过。
有点不知所措,谁能帮帮我?
【问题讨论】:
-
你检查
req.user的值了吗? -
另外你是怎么定义
MongoStore的? -
MongoStore 很好。我可以看到它每次登录时都会添加一个新会话(以及每次我注销时,不知道为什么。)。 req.user 显然是未定义的,起初这是有充分理由的(因为我像白痴一样使用 sessionStorage,没有意识到它是键值存储)。但现在,它来自 req.body.user。如何将其移至 req.user ?我以与登录和注册相同的方式添加它,但我想有一些 Passport 中间件可以减少一些参数。
标签: javascript node.js express passport.js passport-local