我正在使用nodejs,express,mongoose和護照npm製作webapp。nodejs護照沒有註銷,因爲中間件
之前我的登錄和註銷功能工作正常,但現在我不得不添加一項功能來檢查用戶是高級用戶還是普通用戶。 所以我做了一箇中間件,它現在導致註銷問題。 這是我的代碼。
在我的index.js文件中,每秒調用一次/ matchData上的ajax請求以根據用戶類型獲取數據。
//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的在我的登錄和註銷functionalty是如下
//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();
}
現在的問題是,當我註銷它顯示閃存味精成功,但在我的控制檯它仍然顯示我登錄而不是溢價或我溢價,這是,如果我在我登錄的唯一情況。
感謝這解決了這個問題,也是另一個問題,即後退按鈕後退出是讓我登錄。 –
一件事如何使用Flash的消息吧。現在閃存味精正在導致錯誤req.flash需要會話,雖然我的快車應用程序正在使用快速會話。 @Urvish –
1.註銷後的後退按鈕讓我登錄 - 每個頁面上必須有一個終點,您檢查用戶是否登錄。如果用戶沒有登錄,那麼它應該返回401或一些修復代碼。在客戶端代碼中寫入一個響應攔截器,如果任何響應返回401,則將其重定向到登錄頁面。 –