【发布时间】:2011-11-30 05:09:14
【问题描述】:
Active Admin 是用于在您的应用程序中拥有管理仪表板的 gem。它使用 Devise 来登录用户并为管理员创建一个单独的 admin_user 模型。我的应用程序已经使用了 devise 并将其用户作为 user 模型。自从我开始使用活动管理 gem 以来,在我的路由文件中,即使我的用户已登录,以下行也一直解析为 home#index 而不是 users#dashboard。这曾经在登录用户被带到用户之前正常工作#dashboard 作为根 url。
root :to => 'users#dashboard', :constraints => lambda {|r| r.env["warden"].authenticate? }
root :to => 'home#index'
发生的事情是 .authenticate? 正在检查 admin_user(属于 Active Admin)是否登录,但不是我的 user 模型,这是我需要检查的,所以当我登录到活动管理界面后,我的站点根目录变为 users#dashboard,而不检查 user 是否已登录。我怎样才能让.authenticate? 检查正在登录的user 而不是admin_user?
任何帮助或线索将不胜感激
【问题讨论】:
-
实际上,由于 Active Admin 以及它使用 Devise 的事实,我似乎遇到了这个问题。登录到活动管理员界面会影响行为,例如,如果活动管理员已登录,应用程序会尝试将每个用户带到仪表板,如果活动管理员已注销,则应用程序会尝试将每个用户带到 home#index,无论是否通用用户本身是否登录
-
非常感谢任何帮助或线索
-
config/initializers/active_admin.rb 中的当前用户部分
-
实际上已经设置为
config.current_user_method = :current_admin_user,这与整个应用程序中使用的current_user不同。问题是,Devise 使用 Warden,而我在 Routes 文件中使用的上述命令依赖于 Warden。如果我可以使用另一个更具体到哪个用户使用的命令,它会变得更容易:/ -
redirect_to root_path 除非warden.user.is_admin?
标签: ruby-on-rails devise ruby-on-rails-3.1 activeadmin warden