2011-11-23 82 views
3

我有一個使用設計,用戶模型,沒有範圍的Rails應用程序。 我也在應用程序中添加了activeadmin gem,Active Admin是用於在您的應用程序中添加管理控制檯的gem。它使用Devise登錄用戶併爲管理員創建單獨的admin_user模型。Ruby On Rails身份驗證與設計和(監獄)回調

我允許匿名,未登錄的用戶創建購物車,創建一個session[:cart_id]。如果我有用戶登錄要像

Cart.find(session[:cart_id]).user = current_user 

我正打算使用守望者回調wardens callbacks到impliment這與車的用戶,一些像這樣聯繫起來,:不過,我得到一個

Warden::Manager.after_set_user :scope => :user do |user, auth, opts| 

    Cart.find(session[:cart_id]).user = user 

end 

錯誤如果我這樣做:

<% unless user_signed_in? %>拋出一個錯誤:admin_user user is not logged in

任何人有任何想法是怎麼回事?

我看過相關的問題,但沒有任何幫助:

How to access session from Warden/Devise after_authentication callback in Rails

Where should warden callbacks be placed in a rails app?

+0

Active Admin與您的示例有什麼關係?我猜這就是問題所在,你不知道爲什麼admin_user會顯示出來? – Amala

+0

我用一個用戶實現了ActiveAdmin,我不想單獨使用一個admin_user。隨着您的身份驗證集成,一個設計類。然後每個用戶都有角色。如果你對這個解決方案感興趣,我可以解釋一下。 – Amala

回答

1

其實原來的問題是由設置在監獄長的默認範圍,在色器件初始化文件解決。

# Configure the default scope given to Warden. By default it's the first 
    # devise role declared in your routes (usually :user). 
    # config.default_scope = :user 

由於活動管理路由被添加到我的用戶的設計路線之上,因此adminuser成爲默認用戶。

2

該Active系統管理員使用也AdminUser模型執行此回調。所以,也許,一個如果能解決你的問題:

Warden::Manager.after_set_user :scope => :user do |user, auth, opts| 
    Cart.find(session[:cart_id]).user = user if user.class == User 
end 
+0

這仍然是拋出問題中提到的錯誤。 – macarthy

相關問題