用户注销:将GETredirect到POST(Node / Express)

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

以前,我总是通过GET方法做到这一点,但是Stormpath 明确要求对/ logout页面进行POST调用 。

我只在用户通过Stormpathlogin时显示一个用户菜单,这是我在我的router.js中使用的超级简单中间件:

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

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

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

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

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

我不认为在菜单中有任何forms的特殊性,但如果你真的想得到一个请求,你可能需要这样做:

 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请求,然后代表用户将POST请求发送到Stormpath以将用户登出。

如果你继续使用Stormpath护照,我想你可以直接调用req.logout()