2011-04-18 22 views
4

更换一次登录我用模块TokenAuthentication轨,设计:如何通过令牌认证

设计和它是确定当我未认证的,我遵循的auth_token =部分的链接?就像这样:

我跟随链接:/orders?auth_token=q2a8w6virARzv6B2C1vR其中q2a8w6virARzv6B2C1vR是authentication_token的USER1。现在我登录为user1

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

像这样:

  1. 我通过在登录页面登录。我 填写电子邮件和密码user2。 现在我的身份登录user2的
  2. 我跟随链接: /orders?auth_token=q2a8w6virARzv6B2C1vR 其中q2a8w6virARzv6B2C1vR是 authentication_token的USER1。而我 仍然登录为用户2而不是 预计用户1

这是错误吗?有什么最好的做法来改变这种行为,强制通过令牌取代认证?

的Rails 3.0.6

设计1.2.1

回答

2

你没有取消注释:token_authenticatable在用户模式,是否正确?

+0

是的,当然我注释掉':token_authenticatable'在用户模型 – petRUShka 2011-04-18 12:20:12

2

让我们做一些问题巫术......

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

这发生在: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