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