2010-07-29 55 views
1

我使用authlogic來認證用戶。在我的控制器,我使用CURRENT_USER,定義(如記錄)如下:使用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爲零。我查看了declarative_authorization測試助手代碼,發現在這種情況下,declarative_authorization gem實際上將當前用戶存儲在Authorization.current_user(反過來來自Thread.current [「current_user」])中。所以在不同場景下處理當前用戶的方式似乎相當混亂。

我的問題:在正常運行時和測試場景中找到current_user的適當方式是什麼?

回答

0

Angelus,你是對的。我不應該使用get_with,post_with等。它們只是設置Authorization.current_user,session [:user]和session [:user_id],而這些似乎已經被authlogic所淘汰。由於某些原因,這些甚至將UserSession設置爲零,這導致了問題。因此,UserSession.create(用戶(:admin)),然後是常規獲取,發佈等是要走的路。

0

您可以在application_controller中像這樣定義一個before_filter。

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

+0

是的,我確實嘗試過。但這是另一種方式:在功能測試中,Authorization.current_user包含正確的用戶,但c.current_user == nil。所以這個聲明不會起作用... – 2010-07-29 11:52:48

+0

一個問題你如何在測試中維護用戶會話?嘗試調試會話可能是因爲某種原因現在持續存在。 – 2010-07-29 12:07:42

+1

就我而言,要使用authlogic登錄用戶,您必須通過UserSession.create(user(:admin))創建他的會話,然後authlogic當前用戶才能工作。 – Draiken 2010-07-29 12:47:20

相關問題