2012-01-02 10 views
9

私はswitch_user gemを既存のレール3.0.9アプリケーションに実装しようとしています。私の顧客口座のため、それhas_oneのアカウント Devise + Active Admin + Switch Userで他のユーザーのアカウントにログイン

  • ADMINUSER - - これはActiveAdmin
  • で を作成しました 自分のアプリケーション上の2つのモデルがありますが、彼らは

    1. ユーザーです

      私は既にUsersのための盗聴認証を有効にしており、ActiveAdminもとかなりよく機能しています。私のアクティブな管理インターフェースからは、アカウントを選択して、アカウントの所有者と同じようにそれらのアカウントにログインしたいと思います。スイッチユーザーは問題なく動作していますが、問題を知っているユーザーは誰でも簡単にユーザーアカウントにログインできます。

      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 
      

      ためところで私のアプリケーションコントローラで、私はauthenticate_admin_userのための任意のメソッドを作成していない、current_admin_user、アクティブな管理はそれらなしで正常に動作します。

    +0

    私は思うことがほとんどすべてを試みましたが、まだ運がありません。他に誰か? – randika

    答えて

    2

    OK switch_userを保護する解決策を見つけたと思います。私はすべてのあなたは地元のconfig/initializers/switch_user.rbを変更する必要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 
    
    +0

    私はこれが動作するように見えることはできません。私はルートを掘るときにルートを見ていない。あなたはこれを新しいバージョンのactiveadminで試しましたか? – meatherly

    6

    が動いている:

    config.controller_guard = lambda { |current_user, request, original_user, controller| 
        controller.admin_user_signed_in? 
    } 
    

    オリジナルラムダは、2つの引数を持っています。 さらに(最大4つまで)追加して使用してください。

    レールサーバを再起動することを忘れないでください:)

    +1

    これはswitch_userのマニュアルに記載されています。 –

    関連する問題