【问题标题】:Passport seems to forget the user sessionPassport 似乎忘记了用户会话
【发布时间】: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


【解决方案1】:

我在这里有两三种愚蠢,但最终,经过数小时的深夜编码(可能是问题的主要根源),我设法解决了它。

@haywire 将我指向req.user,我看到它是空白的,然后我确保正确发送。

然后它就不起作用了,因为我曾尝试使用路由中间件功能,该功能应该在我定义之前检查用户是否已登录。

咖啡是一种毒品。

【讨论】:

    猜你喜欢
    • 2014-05-07
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 2019-02-01
    相关资源
    最近更新 更多