我正在使用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简单地注销用户的最佳方法是什么?
答案 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()
。