2016-04-06 9 views
0

認証にパスポートを使用する。ユーザーがサインアップすると、自分のアカウントでサインインできることを知らせるメッセージが表示されます。今の時点で、サインアップすることも、私の通知をオフにスローされ、それらをログに記録します。Passportjsサインアップ後の自動ログインを防止する

「あなたはすでにログインしている」「あなたは今すぐサインアップして」
  • "歓迎新しいユーザー"

どのように私はこれを防ぐことができますか?私はreq.logout()を試して、verifySignup()の最後に到達し、サイコロはありませんでした。

マイルータ:あなたは自動ログインを防ぐことができます

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

答えて

4

二つの方法:

1.はpassport.authenticateでoptional callbackを提供します。例...

 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: 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通知にリダイレクトされます。

関連する問題