我有一个正在运行的Rails应用程序,使用ActiveAdmin及其模型来使用户自容。现在,我有兴趣转向ActiveDirectory身份验证,以便我的用户可以与域的用户进行验证。
我一直在尝试adauth,它看起来像一个很棒的gem,但是当尝试将这个gem与ActiveAdmin身份验证“混合”时,我有点迷路。我很确定我不是第一个这样做的人,所以我们将不胜感激。
谢谢!

最佳答案

我终于能够设法将AD集成到ActiveAdmin中。
如果有人感兴趣,这就是我所做的:

  • 在您的宝石中包含宝石“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用户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,我们必须更改文件初始化器/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,我们只需要撤消上一次更改

    关于ruby-on-rails-3 - 集成ActiveAdmin和adauth,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10959157/

    10-10 13:24