【问题标题】:Rails 3 - basic http authentication vs authentication token with iphoneRails 3 - 使用 iphone 的基本 http 身份验证与身份验证令牌
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-25
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    相关资源
    最近更新 更多