2017-11-20 10 views
1

Node.jsでExpressフレームワークを使用して簡単なログイン/ログアウトシナリオを実装しています。ログインのために私は何の問題もありません:シナリオがあるにもかかわらず、ログアウト時に動作が変更さres.redirect( '/')が機能しないのはなぜですか?

//POST route for logging in 
router.post('/login', function (req, res, next) { 
if (req.body.logusername && req.body.logpassword) { 

    User.authenticate(req.body.logusername, req.body.logpassword, function (error, user) { 
     if (error || !user) { 
     var err = new Error('Wrong email or password.'); 
     err.status = 401; 
     return next(err); 
     } else { 
     req.session.userId = user._id; 
     return res.redirect('/clientPage'); 
     } 
    }); 
    } else { 
    var err = new Error('All fields required.'); 
    err.status = 400; 
    return next(err); 
    } 
}) 

// GET route after registering 
router.get('/clientPage', function (req, res, next) { 
    User.findById(req.session.userId) 
    .exec(function (error, user) { 
     if (error) { 
     return next(error); 
     } else { 
     if (user === null) { 
      var err = new Error('Not authorized! Go back!'); 
      err.status = 400; 
      return next(err); 
     } else { 
      return res.sendFile(path.join(__dirname + '/../views/clientPage.html')); 
     } 
     } 
    }); 
}); 

:正しいユーザ名とパスワードを提供した後、「ログイン」をクリックの上、ユーザーが正しくclientPageにリダイレクトされますクライアントページの「ログアウト」ボタンをクリックすると、自分のルートスクリプトによって処理される「/ logout」にAJAX GETリクエストを行う「logout()」関数が呼び出されます。

function logout(){ 
    $.ajax({ 
     type: "GET", 
     url: '/logout', 
     async: true, 
    }) 

} 

// GET for logout 
router.get('/logout', function (req, res, next) { 
    if (req.session) { 
    // delete session object 
    req.session.destroy(function (err) { 
     if (err) { 
     return next(err); 
     } else { 
     return res.redirect('/'); 
     } 
    }); 
    } 
}); 

ブラウザの[ネットワーク]タブでは、最初のリクエストが "200 OK"の応答を得て、クライアントを指定のページにリダイレクトすることがわかります。一方、lo痛風のリクエストは、応答が "root"のホームページ(私のホームページ)に含まれていますが、現在のページを新しいページにリダイレクトしない "304 Not Modified"という結果になります。

答えて

2

ログアウトをajaxリクエストとして送信しているため、問題が発生します。これにより、あなたのページではなく、あなたのAjaxリクエストがリダイレクトされます。あなたがしたいのは、ログアウトボタンにリンクを設定して、ページからリクエストを直接送信することです。

<a href="/logout">log out<a/> 

このようにして、ページ全体がリダイレクトされます。

関連する問題