Rails,设计:如何通过令牌认证替换以前的登录

时间:2011-04-18 10:33:17

标签: ruby-on-rails authentication replace devise

我使用模块TokenAuthentication

设计

当我未经身份验证时,我可以使用?auth_token = part跟随链接。像这样:

我关注了链接:/orders?auth_token=q2a8w6virARzv6B2C1vR其中q2a8w6virARzv6B2C1vR user1 的authentication_token。现在我以 user1 身份登录。

但是,当我通过电子邮件\密码和公共sign_in页面以某个用户身份登录,然后使用另一个用户令牌跟随auth_token这样的链接时,我意外地保持以第一个用户身份登录。

像这样:

  1. 我通过登录页面登录。一世 填写 user2 的电子邮件和密码。 现在我以 user2
  2. 登录
  3. 我关注链接:     /orders?auth_token=q2a8w6virARzv6B2C1vR     q2a8w6virARzv6B2C1vR的位置     authentication_token为 user1 。和我     仍然以 user2 而不是     预期 user1
  4. 是虫子吗?更改此行为以强制通过令牌替换身份验证的最佳做法是什么?

    Rails 3.0.6

    设计1.2.1

2 个答案:

答案 0 :(得分:2)

您取消注释:您的用户模型中的token_authenticatable,对吗?

答案 1 :(得分:2)

让我们做一些神秘的问题......

在运行stragegies之前(token_authenticatable,database_authenticatable)Warden首先检查用户是否已在当前会话中设置。

这发生在:https://github.com/hassox/warden/blob/3d653371a2ff594d9965c1dde642c98cd8485e15/lib/warden/proxy.rb#L212

操作响应/订单查询是否应该仅使用 令牌身份验证?如果是这样,您可以添加:before_filter: reset_session(在authorize_user之前),以便Warden无法从会话中反序列化用户并被迫执行身份验证。

[编辑] 此问题故障单包含合理的解决方案:https://github.com/plataformatec/devise/issues/1644