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"という結果になります。