【问题标题】:Determining current_user with declarative_authorization and authlogic使用 declarative_authorization 和 authlogic 确定 current_user
【发布时间】:2010-07-29 06:08:16
【问题描述】:

我使用 authlogic 对用户进行身份验证。在我的控制器中,我使用 current_user,定义(如文档所述)如下:

  def current_user_session
    return @current_user_session if defined?(@current_user_session)
    @current_user_session = UserSession.find
  end
  def current_user
    return @current_user if defined?(@current_user)
    @current_user = current_user_session && current_user_session.record
  end

我还使用 declarative_authorization 来管理当前用户的权限。在正常的运行时场景中一切正常,但是当我创建使用请求语句(如“get_with”)的功能测试时,控制器中的 current_user 为 nil。我查看了 declarative_authorization 测试助手代码,发现在这种情况下,declarative_authorization gem 实际上将当前用户存储在 Authorization.current_user 中(它又来自 Thread.current["current_user"])。因此,当前用户在不同场景中的处理方式似乎相当混乱。

我的问题:在正常运行时和测试场景中找到 current_user 的合适方法是什么?

【问题讨论】:

    标签: ruby-on-rails authlogic declarative-authorization


    【解决方案1】:

    您可以在 application_controller 中定义这样的 before_filter。

    before_filter { |c| Authorization.current_user = c.current_user }

    【讨论】:

    • 是的,我确实尝试过。但反过来说:在功能测试中,Authorization.current_user 包含正确的用户,但 c.current_user == nil。所以这个说法是行不通的……
    • 一个问题,你是如何在测试中维护你的用户会话的?尝试调试会话可能是由于某种原因它现在持续存在。
    • 就我而言,要使用 authlogic 登录用户,您必须通过 UserSession.create(user(:admin)) 创建他的会话,然后 authlogic 当前用户才能工作。
    【解决方案2】:

    Angelus,你是对的。我不应该使用 get_with、post_with 等。这些只是设置了 Authorization.current_user、session[:user] 和 session[:user_id],这些似乎已经过时了 authlogic。出于某种原因,这些甚至将 UserSession 设置为 nil,这导致了问题。所以 UserSession.create(users(:admin)),然后是常规的 get、post 等是要走的路。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      相关资源
      最近更新 更多