Active Admin身份验证与用户身份验证冲突

时间:2011-10-03 20:25:19

标签: ruby-on-rails devise ruby-on-rails-3.1 activeadmin warden

Active Admin是一个宝石,用于在您的应用程序中设置管理仪表板。它使用Devise登录用户,并为管理员创建单独的admin_user模型。我的应用程序已经使用了设计,并将其用户作为user模型。自从我开始使用活动的admin gem之后,在我的路由文件中,即使我的用户已登录,以下行仍然会解析为home #index而不是用户#spaceboard。这在以前登录用户被带到用户的时候工作得很好#dashboard作为根网址。

root :to => 'users#dashboard', :constraints => lambda {|r| r.env["warden"].authenticate? }
root :to => 'home#index'

正在发生的事情是.authenticate?正在检查是否已登录的admin_user(属于Active Admin),而不是我的user模型,这是我需要检查的内容因为,当我登录到活动管理界面时,我的站点根目录变为用户#msmsboard,而不检查user是否已登录。如何.authenticate?检查登录的user而不是admin_user

非常感谢任何帮助或线索

4 个答案:

答案 0 :(得分:20)

我能够解决这个问题。该问题与Devise期望应用程序中的单个用户模型有关。以下是如何修复它。

config/initializers/devise.rb文件中,添加:

config.scoped_views = true

config.default_scope = :user #or whichever is your regular default user model

多数民众赞成,warden检查:用户是否登录而不是:admin_user

答案 1 :(得分:1)

您为什么使用get "/"?你应该删除它。我使用的定义与你的定义非常相似,并且对我很好。只使用:

root :to => 'users#dashboard', :constraints => lambda {|r| r.env["warden"].authenticate? }
root :to => 'home#index'

答案 2 :(得分:1)

我不确定,但你可以试试像

这样的东西
root :to => proc { |env| [ 302, {'Location'=> env["warden"].authenticate? ? "users/dashboard" : "/home" }, [] ] }

答案 3 :(得分:0)

对我有用的是:

constraint = lambda { |request| request.env["warden"].authenticate? and request.env['warden'].user.instance_of?(AdminUser) }