![](/img/trans.png)
[英]Authlogic HTTP Basic UserSession.find returns nil, means declarative_authorization can't get a current_user
[英]Determining current_user with declarative_authorization and authlogic
我使用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的適當方法是什么?
您可以在application_controller中定義一個before_filter。
before_filter {| c | Authorization.current_user = c.current_user}
安吉魯斯,你說得對。 我不應該使用get_with,post_with等。它們只是設置Authorization.current_user,session [:user]和session [:user_id],而它們似乎已被authlogic淘汰。 並且由於某種原因,它們甚至將UserSession設置為nil,這導致了問題。 因此,UserSession.create(users(:admin)),然后進行常規的獲取,發布等是可行的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.