首页 > 解决方案 > 如何解决 NodeJS、MySQL 中无法 GET /logout 的问题

问题描述

我有一个问题,我无法解决注销功能。我参考了不同的网站和 youtube 教程,但我看到的只是关于 Mongo 的注销等。

在我的"controllers" 文件夹 > "auth.js"中,我有一个注销会话的代码段。基本上,它会清除存储的 cookie。我的注册和登录功能有效。另一方面,注销很困难。

//Logout Session for USER
exports.logout = (req,res) => {
    res.clearCookie('jwt');
    res.redirect('shop/login');
};

在我的"routes" 文件夹 > "user.js"中,我有这个注销代码。

router.get('/profile', (req, res) => {
    if (req.session.login) {
        res.render('shop/profile');
    } else {
        res.send('Please login to view this page!');
    }
    res.end();
});

//LOG OUT 
router.post('/logout',(req, res)=>{
  req.logOut();
  res.redirect("shop/login");
});

最后,在"views" 文件夹 > "profile.ejs"中,我有这段代码。

<div class="container">
    <div class="row">
        <div class="col-sm-8 mt-5">
            <p class="headline2">Welcome!</p>
            <h1><a href="/logout">Log out</a></h1>
        </div>
    </div>
</div>

标签: javascriptmysqlnode.jsjwtejs

解决方案


根据您的代码,注销应该是 GET 请求而不是 POST。

请更新“routes”>“文件夹”>“user.js”如下:

router.get('/profile', (req, res) => {
    if (req.session.login) {
        res.render('shop/profile');
    } else {
        res.send('Please login to view this page!');
    }
    res.end();
});

//LOG OUT 
router.get('/logout', authController.logout);

请确保您已导入 logout() 函数


推荐阅读