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