3

我有一个正在运行的 Rails 应用程序,使用 ActiveAdmin 及其模型对用户进行身份验证。现在我对迁移到 ActiveDirectory 身份验证感兴趣,因此我的用户可以验证域的用户。我一直在尝试adauth,它看起来像一个很棒的gem,但是在尝试将这个gem 与我的ActiveAdmin 身份验证“混合”时我有点迷失了。我很确定我不是第一个这样做的人,所以任何帮助将不胜感激。谢谢!

4

1 回答 1

6

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

如果有人感兴趣,这就是我所做的:

  • 在你的 gem 中包含 gem '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

  • 修改您的 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 回答