我正在尝试实现 switch_user gem 在我现有的 Rails 3.0.9 应用程序中。 我的应用程序上有两个模型,它们是
- 用户 - 我的客户帐户,它has_one 帐户
- AdminUser - 这是由 ActiveAdmin 创建的
我已经为Users
启用了设计身份验证,并且ActiveAdmin也与AdminUser
配合得很好。现在,我想从我的事件管理界面中选择帐户并登录到这些帐户,就像帐户所有者一样。切换用户工作正常,但问题是任何人现在只要知道网址就可以简单地登录用户帐户。
http://localhost:3000/switch_user?scope_identifier=user_1
我需要的只是只允许 AdminUser(即,如果有 ActiveAdmin session )访问用户的帐户。
这就是我的/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
我是否可以访问事件的管理 session ?
/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
顺便说一句,在我的应用程序 Controller 中,我没有为 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?
}
原始 lambda 有 2 个参数。 只需追加更多(最多 4 个)并使用即可。
不要忘记重新启动 Rails 服务器:)
关于ruby-on-rails-3 - 使用 Devise+Active Admin+Switch User 登录其他用户的帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8706012/