我正在尝试在我现有的rails 3.0.9应用程序中实现switch_user gem。 我的应用程序有两种模型,它们是
我已经为Users
启用了设计身份验证,而ActiveAdmin也与AdminUser
一起运行良好。现在,从我的Active Admin界面,我想选择帐户并登录这些帐户,就像帐户所有者一样。切换用户工作正常,但问题是如果他们知道网址,任何人都可以直接登录到用户帐户。
http://localhost:3000/switch_user?scope_identifier=user_1
我只需要允许AdminUser(即,如果有ActiveAdmin会话)访问用户的帐户。
这就是我的/config/initializers/switch_user.rb的样子
SwitchUser.setup do |config|
config.controller_guard = lambda { |current_user, request| current_admin_user.nil?}
config.redirect_path = lambda { |request, params| "/dashboard" }
end
但是我收到了这个错误
NameError in SwitchUserController#set_current_user
undefined local variable or method `current_admin_user' for main:Object
无论如何我可以访问活动的管理会话吗?
/config/initializers/active_admin.rb的代码
ActiveAdmin.setup do |config|
config.site_title = "MyAppName"
config.authentication_method = :authenticate_admin_user!
config.current_user_method = :current_admin_user
end
btw在我的应用程序控制器中我没有为authenticate_admin_user
创建任何方法,current_admin_user
活动管理员在没有它们的情况下正常工作。
答案 0 :(得分:6)
您需要修改本地config/initializers/switch_user.rb
:
config.controller_guard = lambda { |current_user, request, original_user, controller|
controller.admin_user_signed_in?
}
原始lambda有2个参数。 只需添加更多(最多4个)并使用它。
别忘了重启rails服务器:)
答案 1 :(得分:2)
好的,我想我找到了保护switch_user
的解决方案。我所做的只是在admin_users范围内移动路径
ActiveAdmin.routes(self)
devise_for :admin_users, ActiveAdmin::Devise.config do
match '/admin/switch_user', :controller => 'switch_user', :action => 'set_current_user'
end