Passport似乎忘记了用户会话

时间:2015-08-05 12:35:43

标签: javascript node.js express passport.js passport-local

用Google搜索了很长时间,但到目前为止还没有找到任何可行的东西,所以我想问这里。

我试图让会话与Passport一起工作。我已经完成了注册和登录功能,这似乎可以正常工作。

主要问题是req.isAuthenticated始终返回false。 我尝试过平常的事情:

确保app.use(passport.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

返回false。我还发布了一条日志消息,告诉我模块何时被初始化,并且只在服务器启动时执行一次。

据我所知,user.deserializeUser永远不会被调用。

我的智慧结束了,有人能帮助我吗?

1 个答案:

答案 0 :(得分:0)

我在这里已经有两三种傻了,但最后,经过长达数小时的深夜编码(可能是问题的主要根源),我设法解决了这个问题。

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

然后它将无法工作,因为我曾尝试使用路由中间件函数,该函数应该在我定义之前检查用户是否已登录。

咖啡是一种药物的地狱。