【问题标题】:User logout: Redirect GET to POST (Node/Express)用户注销:将 GET 重定向到 POST (Node/Express)
【发布时间】:2016-07-22 22:26:18
【问题描述】:

我正在使用Stormpath for Expressjs(目前没有 Passport)来处理我的用户注册。我非常关心注销用户的正确方法是什么。

以前,我总是通过 GET 方法,但是 Stormpath explicitly requires a POST call to the /logout page

我只在用户通过 Stormpath 登录时显示用户菜单,这是我在 Express 中的 router.js 中拥有的超级简单的中间件:

router.use(stormpath.getUser, function (req, res, next) {
    if (req.user) {
        req.session.useremail = req.user.email;
    }
    next();
});

现在,当然在这个菜单中有 Logout 条目。我希望我的用户单击此链接以注销,但是我知道当使用像 <a href="/logout">Logout</a> 这样的锚链接时,会发送 GET 请求,而不是 POST。

我一直在寻找无数种将 GET 请求重定向到 POST 的方法,但我觉得这绝对是错误的方法。另外我觉得在菜单中使用表单是没有意义的:

<ul>
    <li>User Profile</li>
    <li>User Settings</li>
    <form action="/logout" method="/post">
         <input type="submit">
    </form>
</ul>

所以问题是:通过 POST 简单地注销用户的最佳方式是什么?

【问题讨论】:

标签: node.js http authentication express request


【解决方案1】:

我认为在菜单中包含表单并没有什么特别不好的地方,但如果您真的想要获取请求,您可能需要执行以下操作:

var request = require('request')

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

  // Send logout POST request to stormpath REST api
  request.post({
      url: 'https://stormpath/logout/url',
      form: {
        key: 'value'
      }
    },
    function(err, httpResponse, body) {
      // Check if there was an error logging the user-out
      if (err) return res.send('Error logging out')
        // If no error, user is logged out so redirect them or something
      res.redirect('/')
    }) 
})

因此,您的快速应用程序接受 GET 请求,然后代表用户向 Stormpath 发出 POST 请求以注销用户。

如果您继续使用 Stormpath 护照策略,我认为您可以直接致电 req.logout()

【讨论】:

  • 最后我实现了
    解决方案,但我会将其标记为有效答案,因为它实际上回答了我的问题。
猜你喜欢
  • 1970-01-01
  • 2014-07-23
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 2022-11-07
  • 2014-06-28
相关资源
最近更新 更多