Passportjs防止注册后自动登录
Passportjs PREVENT auto-login after signing up
使用passportjs进行身份验证。当用户注册时,我希望出现一条消息,让他们知道他们现在可以使用自己的帐户登录了。截至目前,注册也会将它们登录,从而关闭我的通知:
- "您现在可以注册了"
- "您已登录"
和
- "欢迎新用户"
我该如何防止这种情况发生?我在verifySignup()
结束时尝试了req.logout()
,但没有骰子。
我的路由器:
router.route('/login')
.get(function(req, res){
// If the user is already logged in, redirect them to the dashboard
if(req.isAuthenticated()) {
req.flash('alert', 'You are already logged in');
res.redirect('/');
} else {
// Otherwise, allow them to login
// Redirect them to the login pages
res.render('login',
{ host: req.baseUrl,
error: req.flash('error'),
success: req.flash('success'),
alert: req.flash('alert')
});
}
}).post(passport.authenticate('local-login', {
successRedirect: '/',
failureRedirect: '/login',
badRequestMessage: "You need to enter your username and password",
failureFlash: true // allow flash
})
);
router.route('/signup')
.get(function(req, res){
// If the user is already logged in, redirect them to the dashboard
if(req.isAuthenticated()) {
req.flash('alert', 'You must first log out before signing up for a new account');
res.redirect('/');
} else {
// Otherwise, allow them to signup
// Redirect them to the signup pages
res.render('signup',
{ host: req.baseUrl,
error: req.flash('error'),
success: req.flash('success'),
alert: req.flash('alert')
});
}
}).post(passport.authenticate('local-signup', {
successRedirect: '/login',
failureRedirect: '/signup',
badRequestMessage: "You must fill in all of the form fields.",
failureFlash: true // allow flash
})
);
防止自动登录的两种方法:
1.在passport.authenticate中提供可选回调。示例。。。
router.post('/signup', function(req, res, next) {
/* ... */
passport.authenticate('local-signup', function(err, user, info) {
if (err) { return next(err) }
if (!user) { return res.redirect('/signup') }
res.redirect('/login');
})(req, res, next);
});
注意:如果提供回调,它将成为应用程序的负责登录用户、建立会话以及以其他方式执行所需操作。
在本例中,既不进行登录,也不进行会话存储。因此,阻止了自动登录。
2.更简单的解决方案。使用选项session: false
禁用使用会话。
.post(passport.authenticate('local-signup', {
successRedirect: '/login',
failureRedirect: '/signup',
badRequestMessage: "You must fill in all of the form fields.",
failureFlash: true, // allow flash,
session: false // prevent auto-login
})
使用此解决方案,会话实例中不会存储任何用户信息,因此重定向到/login
会正确通知"您现在可以使用您的帐户登录"。
相关文章:
- Stormpath注册页面上的社交登录
- 注册,登录和分享内容通过LinkedIn和Twitter与服务器端身份验证(如Google+)
- 流星 - 添加带有熨斗的路由后无法提交用户.路由器到登录和注册表单
- 单击按钮时切换html登录/注册表单
- 用于登录/注册Angular应用程序的模式/对话框
- Passportjs防止注册后自动登录
- 快递:我无法获得Passport来验证登录.注册正在进行,但您可以帮助护照登录验证吗
- 使用自制的html表单注册/登录网站
- 登录页面和注册页面我需要将所有内容放在一个页面中
- 禁用 converse.js 的登录和注册选项卡,并将 converse.js 与 openfire 连接
- expressJS + MongoDB - 登录/注册方法
- 两个登录/注册按钮是相同的.如何为同一个按钮提供 2 个功能
- 为登录/注册模式实现正确的php数据库访问
- JavaScript:使用localStorage登录/注册
- JavaScript登录/注册回调函数
- 我应该如何识别使用Facebook登录注册的用户
- Facebook登录/注册帮助
- 我可以使用什么作为密码登录/注册用户与OAuth2.0
- Flux+React.js登录/注册流
- 如何创建弹出式登录/注册