2011-11-23 103 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

相关问题