Rails 3 – 基本的http身份validation与使用iphone的身份validation令牌

最初我使用基本的http身份validation来按照本指南对设计用户进行身份validation:

http://jessehowarth.com/2011/04/27/ajax-login-with-devise

我成功地validation了用户,但会话仍然永远登录。 没有办法破坏用户的会话。 事实上,当我添加user_signed_in? 在我的create方法中设计的方法,即使通过json注销也总是返回true。 所以我得出结论,没有办法使用基本的http身份validation结束会话。 您所能做的就是检查用户是否已登录并将状态代码作为json发送回客户端。

然后我尝试了身份validation令牌路由,它允许您使用身份validation令牌创建会话,然后通过删除该身份validation令牌来销毁会话,并且用户必须再次登录才能访问需要身份validation的页面,如在这篇文章中显示:

使用CURL进行设计和认证!

这样做的缺点是,您需要为每个需要身份validation的页面输入这个非常长的字符串,这似乎有点不合需要。 我希望这里有两个世界中最好的,你可以像在网络浏览器中一样登录和退出。

我不确定我所说的一切是否准确,但似乎与这篇文章一致:

设计和rails 3中的http身份validation

在那篇文章中,他说身份validation令牌“比http基本身份validation更安全,因为密钥可能会过期”。 我认为他的意思是,一旦您使用基本身份validation登录,那就是它,您将永远登录,而身份validation令牌可以使其过期并强制用户再次登录。 这是准确的解释吗?

谢谢你的回复

HTTP身份validation的工作方式,一旦浏览器登录(即发送WWW-Authenticate标头),它将保持登录状态,直到其HTTP身份validation缓存过期(通常在您退出浏览器时)。

由于浏览器继续在HTTP身份validation中发送有效凭据(没有“HTTP注销”),这就是您看到用户仍然登录的原因。

我的建议是在Devise中使用authentication_tokenfunction并将?auth_token传递给您的API。 请记住,即使它是POST / DELETE / PUT /等,您也必须将它们作为URL的一部分传递。 (这是一个可能现在修复的Devise bug)。