我正在使用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/