2011-11-03 164 views
4

起初我是用基本的HTTP验证与设计一个验证用户遵循本指南:的Rails 3 - 基本的HTTP认证VS认证令牌与iPhone

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

在这一岗位上,他说,认证令牌是“从1995年起HTTP基本身份验证更安全密钥可以过期“。我认为他的意思是说,一旦您使用基本身份验证进行登录,就是这样,您永远登录,而身份验证令牌可以使其过期并强制用户再次登录。这是准确的解释吗?

感谢响应

+0

我注意到您将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”:“退出”,“utf8”:“✓”,“用户”:{“remember_me”:“1”,“password”:“password” :“[email protected]”}}'\ -c cookie'? –

+0

我重新格式化了问题,所以现在只是一个是或否的问题。尽管仍然没有回应。 – JohnMerlino

回答

0

是HTTP认证工作,一旦浏览器中(即在发送WWW-Authenticate头)记录的方式,将保持登录状态直到其HTTP认证缓存过期(通常当您退出浏览器)。

因为浏览器继续发送的HTTP认证有效证书(没有“HTTP注销”),这就是为什么你看到用户仍然登录。

我的建议是使用设计的authentication_token功能并将?auth_token传递给您的API。请记住,即使它是POST/DELETE/PUT/etc,也必须将它们作为URL的一部分传递。 (这是一个可能现在已经修复的设计错误)。