node.js - 用户注销 : Redirect GET to POST (Node/Express)

标签 node.js http authentication express request

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

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

仅当用户通过 Stormpath 登录时,我才显示用户菜单,这是我在 Express 中的 router.js 中的 super 简单中间件:

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

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

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

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

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

最佳答案

我不认为在菜单中包含表单有什么特别不好的地方,但如果你真的想要一个获取请求,你可能需要这样做:

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('/')
    }) 
})

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

如果您确实继续使用 Stormpath 通行证策略,我认为您可以简单地调用 req.logout()

关于node.js - 用户注销 : Redirect GET to POST (Node/Express),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36384700/

相关文章:

javascript - Node.js 如何在没有任何信息的情况下悄无声息地崩溃?

javascript - 如何取消加载背景图片

javascript - Angular http : how to call images with custom headers?

ruby-on-rails - 如果用户使用 Ruby on Rails 超过设定的时间不活动,如何处理登录 cookie 的过期?

mysql - firebird db 如何处理用户身份验证?

node.js - 如何在 ReactJs API 调用上维护 Node 后端的 session

javascript - 从 node.js 调用时,mongoose .save() 会挂起 3 级子文档

http - SSL session 票证

java - Web 浏览器命令行程序

javascript - Amazon DynamoDB 的排序、跳过和限制(跳过)查询