集成ActiveAdmin和adauth

时间:2012-06-09 07:13:34

标签: ruby-on-rails-3 active-directory activeadmin

我有一个正在运行的Rails应用程序,使用ActiveAdmin及其模型来验证用户身份。现在我有兴趣转向ActiveDirectory身份验证,因此我的用户可以验证域的用户。 我一直在尝试adauth,它看起来像一个伟大的宝石,但我试图将这个宝石与我的ActiveAdmin身份验证“混合”时有点迷失。我很确定我不是第一个这样做的人,所以任何帮助都会受到赞赏。 谢谢!

1 个答案:

答案 0 :(得分:6)

我终于能够设法在ActiveAdmin中集成AD。

这就是我所做的,以防有人感兴趣:

  • 在宝石

  • 中加入宝石'adauth'
  • 执行捆绑安装

  • 执行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_model user install_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

  • 修改你的sessions_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,我们只需要撤消上一次更改