3

ActiveAdminとそのモデルを使用してユーザーを認証するRailsアプリケーションを実行しています。ここで、ActiveDirectory認証に移行することに興味があります。これにより、ユーザーはドメインのユーザーと検証できます。私はadauthを試してきましたが、すばらしいgemのように見えますが、このgemをActiveAdmin認証と「混合」しようとすると、少し迷ってしまいます。私はそれをする最初の人ではないと確信しているので、どんな助けもいただければ幸いです。ありがとう!

4

1 に答える 1

6

私はついにADをActiveAdminに統合することができました。

誰かが興味を持った場合に備えて、私がしたことは次のとおりです。

  • gem'adauth'をgemに含めます

  • バンドルインストールを実行する

  • rails g adauth:configを実行します

  • AD接続用にconfig/initializers/adauth.rbを構成します。たとえば、ドメインがexample.comの場合、以下を含める必要があります。

    c.domain = "example.com" 
    c.server = "IP address of your domain controller"
    c.base = "dc=example, dc=com"
    
  • rails g adauth:sessionsを実行します

  • application_controller.rbを変更します。私のは:

    class ApplicationController< ActionController::Base
        protect_from_forgery
        helper_method :current_user
        def current_user
            @current_user ||= User.find(session[:user_id]) if session[:user_id]
        end
        def authenticate_user!
           if current_user.nil?
               redirect_to '/sessions/new', :error => "Invalid Login" 
           end
        end
    end
    
  • rails g adauth:user_modeluserinstall_adauthを実行します。これにより、移行install_adauthが作成されますが、何らかの理由で空になりました。私はそれを自分で埋めなければなりませんでした:

    class InstallAdauth < ActiveRecord::Migration
        def up
            create_table :users do |u|
                u.string 'login'
                u.text 'group_strings'
                u.string 'name'
                u.string 'ou_strings'
            end
        end
        def down
            drop_table :users
        end
    end
    
  • rake db:migrateを実行します

  • session_controller.rbを変更します。私のは:

    class SessionsController < ApplicationController
        def new
            redirect_to '/admin' if current_user 
        end
        def create
            ldap_user = Adauth.authenticate(params[:username], params[:password])
            if ldap_user
                user = User.return_and_create_with_adauth(ldap_user)
                session[:user_id] = user.id
                redirect_to '/admin' 
            else
                redirect_to '/sessions/new', :error => "Invalid Login" 
            end
        end
    
        def destroy
            session[:user_id] = nil
            redirect_to '/sessions/new' 
        end
    end
    
  • これまでのところ、ActiveAdminによる検証は引き続き機能します。ActiveDirectoryに切り替えるには、ファイルinitializers/active_admin.rbを変更する必要があります

    # config.authentication_method = :authenticate_admin_user!
    config.authentication_method = :authenticate_user!
    
    #config.current_user_method = :current_admin_user
    config.current_user_method = :current_user  
    
  • 私の場合、Apacheも再起動する必要がありました。

ActiveAdminに戻したい場合は、最後の変更を元に戻す必要があります。

于 2012-06-11T18:13:17.127 に答える