在Express和Passport之间检测Cookie
访问http://localhost/login
会立即redirect到Facebook,以确认应用程序使用情况。 一旦授权,Facebook联系人http://localhost/login?code=
使用特殊的代码,允许服务器获取用户的信息,如姓名和性别。
Express().get('/login', Passport().authenticate('facebook', { failureRedirect: 'http://localhost/', }), function(req, res) { database.saveData(req.user, **randomlyGeneratedHash**); res.cookie('session', **randomlyGeneratedHash**); res.end(); });
这可以按预期的方式工作,但是当通过身份validation的用户连续访问/login
时,整个过程会重复,并且会得到一个新的cookie。
有没有一种方法可以在Express和Passport之间运行一些代码,如果用户已经有了一个有效的Cookie,可以停止Passportredirect到Facebook?
您可以使用类似的东西来ensureAuthenticated
在/login
path上进行/login
:
var CheckIfAlreadyLoggedIn = function(req, res, next) { if (req.isAuthenticated()) { return res.redirect('/'); // or where you want them to go } next(); }; Express().get('/login', CheckIfAlreadyLoggedIn, Passport().authenticate('facebook', ...));
这会将已经login的用户redirect到/
当他们尝试访问/login
。
- 护照本地策略不保存cookie或会话中的用户
- PassportJS – 自定义callback并将Session设置为false
- Node.js在会话过期Express&Passport上运行function
- 使用afterRemote钩子在远程方法的环回中发送响应
- 护照req.isAuthenticated()总是返回fasle
- PassportJS会话混合起来
- NodeJS:callback不是一个函数 – 电子邮件validation
- Node.js Express – 在不同的服务器上共享Passport会话
- Express-mysql-session阻止passport deserializeUser运行