2016-04-03 83 views
2

我为Expressjs(此时没有护照)使用Stormpath来处理我的用户注册。我非常担心注销用户的正确方法。用户注销:重定向GET到POST(节点/快递)

之前,我总是通过GET方法做到这一点,但Stormpath explicitly requires a POST call to the /logout page

我只显示当用户通过Stormpath登录的用户菜单,这是超级简单的中间件,我在我的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请求到POST,但我觉得这是绝对错误的方式。此外,我觉得这将毫无意义使用表单像菜单里面:

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

所以现在的问题是:什么是简单地退出通过POST的用户的最佳方法是什么?

+0

你好!我在[Stormpath](https://stormpath.com)工作,并将更改实施到POST。此SO讨论是我们为什么选择使用POST的一个很好的总结:http://stackoverflow.com/questions/3521290/logout-get-or-post – robertjd

回答

1

我不认为这有什么特殊性不好有菜单的形式,但如果你真的想拥有你可能需要做一些事情,像这样的GET请求:

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

如果您确实转向使用Stormpath护照过关手段,我认为您可以简单地致电req.logout()

+0

最后我实现了

解决方案,但我将其标记为一个有效的答案,因为它实际上回答我的问题 – wiredmark