ran*_*ika 9 devise ruby-on-rails-3 activeadmin
我正在尝试在我现有的rails 3.0.9应用程序中实现switch_user gem.我的应用程序有两个模型,它们是
我已经启用了设计身份验证Users,ActiveAdmin也可以很好地工作AdminUser.现在,从我的Active Admin界面,我想选择帐户并登录这些帐户,就像帐户所有者一样.切换用户工作正常,但问题是如果他们知道网址,任何人都可以直接登录到用户帐户.
HTTP://本地主机: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
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误
NameError in SwitchUserController#set_current_user
undefined local variable or method `current_admin_user' for main:Object
Run Code Online (Sandbox Code Playgroud)
无论如何我可以访问活动的管理会话吗?
/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
Run Code Online (Sandbox Code Playgroud)
顺便说一下我的应用程序控制器我没有创建任何方法authenticate_admin_user,current_admin_user活动管理员没有它们工作正常.
你需要修改本地config/initializers/switch_user.rb:
config.controller_guard = lambda { |current_user, request, original_user, controller|
controller.admin_user_signed_in?
}
Run Code Online (Sandbox Code Playgroud)
原始lambda有2个参数.只需添加更多(最多4个)并使用它.
别忘了重启rails服务器:)
好吧,我想我找到了一个解决方案来保护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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2071 次 |
| 最近记录: |