我使用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的适当方法是什么?
答案 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)),然后定期获取,发布等等是可行的方法。