PassportJS和Express 4不正确保存Cookie /会话

我有一个使用Express 4与护照0.3.2的应用程序。 我build立了一个passport-local策略,当/session端点发送用户名和密码时,获取正确的用户信息。

但是,用户信息永远不能正确保存。 因为这样的req.user在所有监听器中都是未定义的,而req.isAuthenticated()总是返回false。

我已经看到其他职位,经常发现与中间件设置的顺序问题,但我已经命令他们以正确的方式,所以我不知道该从哪里去。

这是我的POST监听器/session

 app.post("/session", passport.authenticate('local'), (req: any, res: any) => { // if we reach this point, we authenticated correctly res.sendStatus(201); } ); 

这是我的LocalStrategy设置:

 passport.use(new LocalStrategy( (username, password, done) => { let users = userRepository.getAll(); let usernameFilter = users.filter(u => u.getUsername() === username); if (!usernameFilter || usernameFilter.length !== 1) { return done(null, false, { message: 'Incorrect username.' }); } if (!password || password !== "correct") { return done(null, false, { message: 'Incorrect password.' }); } return done(null, usernameFilter[0]); } )); 

这是我的应用程序设置:

 let app = express(); app.use(cookieParser()); app.use(bodyParser.json()); app.use(expressSession({ secret: 'my secret key', resave: true, saveUninitialized: true })); app.use(passport.initialize()); app.use(passport.session()); 

我正在使用以下依赖版本:

 "body-parser": "^1.15.1", "cookie-parser": "^1.4.3", "express": "^4.13.4", "express-session": "^1.13.0", "passport": "^0.3.2", "passport-local": "^1.0.0" 

我已经添加了一个callback到我的POST /session ,但是会引发错误。 这是我的callback:

 app.post("/session", passport.authenticate('local', { session: false }), (req: express.Request, res: express.Response) => { req.logIn(req.user, (err: any) => { if (err) throw err; }); // if we reach this point, we authenticated correctly res.sendStatus(201); } ); 

我得到以下错误:

错误:无法将用户序列化到会话中

       

网上收集的解决方案 "PassportJS和Express 4不正确保存Cookie /会话"

从护照文件:

请注意,使用自定义callback时,应用程序负责build立会话(通过调用req.login())并发送响应。


啊,好,我们正在取得进展。 您必须configuration护照才能序列化和反序列化用户信息。 请参阅此信息。 应该指出的是,你将用自己的数据库访问对象replaceUser