gpt4 book ai didi

javascript - Passportjs 阻止注册后自动登录

转载 作者:太空宇宙 更新时间:2023-11-04 02:57:20 28 4
gpt4 key购买 nike

使用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. 提供 optional callback在 Passport 上。验证。示例...

      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);
});

注意:如果提供了回调,它将成为应用程序的 负责登录用户、建立 session 以及执行所需的操作。

在此示例中,不会发生登录或 session 存储。因此,自动登录被阻止。

2.更简单的解决方案。使用选项 session: false 禁用 session 。

.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
})

使用此解决方案, session 实例中不会存储任何用户信息,因此重定向到 /login 会正确通知“您现在可以使用您的帐户登录”。

关于javascript - Passportjs 阻止注册后自动登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36460433/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com