大佬教程收集整理的这篇文章主要介绍了node.js – req.session.passport和req.user空白,并且req.isAuthenticated在使用passport-facebook初次成功登录后返回false,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
configExpressApp.set('views','./views'); configExpressApp.set('view engine','jade'); configExpressApp.use(morgan('dev')); configExpressApp.use(cookieParser()); configExpressApp.use(bodyParser.urlencoded({ extended: true,})); configExpressApp.use(bodyParser.json()); configExpressApp.use(expressSession({ secret:'MyExpressSecret',saveUninitialized: true,resave: true })); configExpressApp.use(passport.initialize()); configExpressApp.use(passport.session()); configExpressApp.use(methodOverride()); configExpressApp.use(express.static('./public'));
这是初始成功登录和重定向的req.session对象,req.user包含与req.session.passport.user相同的数据.
{ cookie: { path: '/',_expires: null,originalMaxAge: null,httpOnly: true },passport: { user: { _id: 53ce23e3121421f229a438f8,info: false,loginType: 'fb',fbId: 'MyId',name: 'Karthic Rao',email: 'kartronics85@yahoo.com' } } }
这是我之前与策略内部的done()回调以及序列化调用内部关联的信息.在成功登录和回调之后,我使用res.redirect将用户重定向到不同的路由,但来自该路由的请求包含sessionID(所以我不认为它与会话存储的问题),但是req.user字段不存在(可能是因为passport.initialize()和passport.session()中间件没有找到要验证的请求)并且req.session.passport字段为空,这里是来自req的console.log的详细信息对象.
sessionID: 'I9R1c3PIYgDW5OpWbNT7qb02Hn4lOeAB',session: { cookie: { path: '/',passport: {} },
这是我的反序列化方法
passport.deserializeUser(function(user,done) { console.log('deserialize loginType facebook'); db.collection("users").findOne({ fbId: user.id },function(err,docs) { console.log(docs); done(err,docs); }); });
这是我的序列化方法
passport.serializeUser(function (user,done) { console.log(user); done(null,user); });
这对我的开发造成了很大的障碍,我怎么能解决这个问题呢?
(非常)基本上,当用户尝试进行身份验证时,事情就是这样发生的:
> Passport尝试针对Facebook服务器对您的用户进行身份验证
>如果成功,则调用回调函数(或successRedirect)
使用包含用户详细信息的对象
>然后,Passport调用req.login来存储一些信息
会话中的用户
>然后调用serializeUser并有效地存储您的数据
在会话中指定.
但是从您发布的代码中,我怀疑在您的deserializeUser中,user.id是未定义的,因为存储在会话中的用户对象使用名为_id且不是id的ID字段.
如果你改变了
db.collection("users").findOne({ fbId: user.id
至
db.collection("users").findOne({ fbId: user._id
db.collection("users").findById(user._id,[fields],[options],[callback]);
我认为它应该工作.
以上是大佬教程为你收集整理的node.js – req.session.passport和req.user空白,并且req.isAuthenticated在使用passport-facebook初次成功登录后返回false全部内容,希望文章能够帮你解决node.js – req.session.passport和req.user空白,并且req.isAuthenticated在使用passport-facebook初次成功登录后返回false所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。