2017-06-21 11 views
0

nodejs、express、mongoose、およびpassport npmを使用してwebappを作成しています。nodejsミドルウェアのためパスポートがありません

私のログインとログアウト機能はうまくいきましたが、ユーザーがプレミアムユーザーか通常ユーザーかを確認する機能を追加しなければなりませんでした。 ミドルウェアを作成しました。ミドルウェアがログアウトに問題を引き起こしています。 はこちらです。

私のindex.jsファイルでは、ユーザータイプに応じてデータを取得するために、毎秒ajaxリクエストon/matchDataが呼び出されています。

//Login Routes 
router.get('/login',isAuthenticated2, function(req, res, next) { 
    res.render('user/login',{ 
    title:'login' 
    }); 
}); 

router.post('/login',isAuthenticated2, passport.authenticate('local',{failureRedirect:'/users/login', failureFlash:'Invalid Email Id or Password'}),function(req,res){ 
    console.log('Authentication Successful'); 
    req.flash('success','You are logged in.'); 
    res.redirect('/'); 
}); 

//logout route 
router.get('/logout',isAuthenticated,function(req,res){ 
    req.logout(); 
    req.flash('success','You have logged out'); 
    res.redirect('/'); 
}); 

function isAuthenticated(req, res, next) { 
    if(req.isAuthenticated()) 
     return next(); 
    else{ 
     req.flash('error','Please Login First') 
     res.redirect('/users/login'); 
    } 

} 

function isAuthenticated2(req, res, next) { 
    if(req.isAuthenticated()){ 
     req.flash('info','You are already logged in.') 
     res.redirect('/'); 
    } 
    else 
     return next(); 
} 

私はそれが成功したフラッシュMSGが表示されますが、私のコンソールで、それはまだ私が示してログアウトしたときに、今の問題はあるが、以下のように私のログインおよびログアウトfunctionaltyがある

//ajax routes for json response 
router.get('/matchData', isPremium); 


//middleware causing problem 
function isPremium(req,res,next){ 
    if(req.isAuthenticated()){ 
     if(req.user.type=='premium'){ 
      console.log("user is premium"); 
      Match.getMatchLatestData(function(err,match){ 
       if(err) throw err; 
       res.send(match[0]); 
      }); 
     }else{ 
      console.log("user is loggedin but not premium"); 
      Match.getMatchData(function(err,match){ 
       if(err) throw err; 
       res.send(match[0]); 
      }); 
     } 
    }else{ 
     console.log("user not logged in"); 
     Match.getMatchData(function(err,match){ 
      if(err) throw err; 
      res.send(match[0]); 
     }); 
    } 
} 

と私のuser.jsの中ログインはなく、プレミアムまたは私は私がログインしていた場合にのみ、ケースですプレミアム、と思います。

答えて

1

代わりに以下を使用するreq.logout()試しを使用しての

スニペット
+0

おかげで、この問題以降にログインし、私を保っていたサインアウトバックボタンも別の問題を解決しました。 –

+0

それにフラッシュメッセージを使用する方法をもう一つ。私のエクスプレスアプリはexpress-sessionを使用していますが、今、flash msgはエラーを引き起こしていますreq.flashはセッションが必要です。 @Urvish –

+0

1.ログアウトした後の戻るボタン - ログインしているかどうかをチェックする各ページに1つのエンドポイントがなければなりません。ユーザーがログインしていない場合は、401またはいくつかの修正コードが返されます。レスポンスのいずれかが401を返し、ログインページにリダイレクトする場合は、クライアント側のコードに1つのレスポンスインターセプタを記述します。 –

0

我々は、ログイン後のユーザーのセッションを設定したノードでのように破壊し、このコードを試してみてくださいhttp://www.passportjs.org/docs/logout/

app.get('/logout', function(req, res){ 
    req.logout(); 
    res.redirect('/'); 
}); 

から、あるいは場合には、ユーザーに

//logout route 
router.get('/logout',function(req,res){ 
    req.session.user = ''; 
    res.redirect('/login'); // redirect wherever required 
}); 
0
私は同様の問題があった

、見つかった答えをログアウトしますと同じログアウトページがあります。

app.get('/logout', function(req, res){ 
    req.logout(); 
    res.render('logout', { 
      title: "Moi moi!" 
     }); 

    }); 
関連する問題