使用declarative_authorization和authlogic确定current_user

时间:2010-07-29 06:08:16

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

我使用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的适当方法是什么?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

Angelus,你是对的。我不应该使用get_with,post_with等。这些只是设置Authorization.current_user,session [:user]和session [:user_id],这些似乎已经过时了authlogic。由于某种原因,这甚至将UserSession设置为nil,这导致了问题。所以UserSession.create(用户(:admin)),然后定期获取,发布等等是可行的方法。