用户注销:将GET重定向到POST(节点/快速)

时间:2016-04-03 11:08:31

标签: node.js http authentication express request

我正在使用Stormpath用于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 条目。我希望我的用户单击此链接到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简单地注销用户的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

我认为在菜单中添加表单并不存在任何特殊性,但如果您真的想要获取请求,则可能需要执行以下操作:

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()