【发布时间】:2011-11-03 14:55:00
【问题描述】:
最初,我使用基本的 http 身份验证来验证用户,并按照本指南进行设计:
http://jessehowarth.com/2011/04/27/ajax-login-with-devise
我已成功验证用户身份,但会话始终保持登录状态。没有办法破坏用户的会话。其实我什么时候加了user_signed_in?在我的 create 方法中设计的方法,即使通过 json 注销,它也会始终返回 true。所以我得出结论,没有办法使用基本的 http 身份验证来结束会话。您真正能做的就是检查用户是否已经登录,并将状态码作为 json 发送回客户端。
然后我尝试了身份验证令牌路由,它允许您使用身份验证令牌创建会话,然后通过删除该身份验证令牌来销毁会话,并且用户必须再次登录才能访问需要身份验证,如本文所示:
Devise and Authentication with CURL !
这样做的缺点是您必须为每个需要身份验证的页面输入这个非常长的字符串,这似乎有点不可取。我希望这里能两全其美,您可以像在网络浏览器中一样登录和注销。
我不确定我所说的一切是否准确,但似乎与这篇文章一致:
http authentication in devise and rails 3
在那篇文章中,他说身份验证令牌“比 http 基本身份验证更安全,因为密钥可能会过期”。我假设他的意思是,一旦您使用基本身份验证登录,就是这样,您将永远登录,而身份验证令牌可以使其过期并强制用户再次登录。这是准确的解释吗?
感谢回复
【问题讨论】:
-
我注意到您将 HTTP 方法设置为 POST 并设置 X-HTTP-Method-Override 标头,而不是将 HTTP 方法设置为 DELETE。你试过
curl -H 'Content-Type: application/json' \ -H 'Accept: application/json' -X DELETE \ http://localhost:3000/users/sign_out \ -d '{"remote": "true", "commit": "Sign Out", "utf8": "✓", "user": {"remember_me": "1", "password": "password", "email": "email@email.com"}}' \ -c cookie吗? -
我重新格式化了问题,所以现在它只是一个是或否的问题。不过还是没有反应。
标签: ruby-on-rails json curl devise