我有一个正在运行的Rails应用程序,使用ActiveAdmin及其模型来验证用户身份。现在我有兴趣转向ActiveDirectory身份验证,因此我的用户可以验证域的用户。 我一直在尝试adauth,它看起来像一个伟大的宝石,但我试图将这个宝石与我的ActiveAdmin身份验证“混合”时有点迷失。我很确定我不是第一个这样做的人,所以任何帮助都会受到赞赏。 谢谢!
答案 0 :(得分:6)
我终于能够设法在ActiveAdmin中集成AD。
这就是我所做的,以防有人感兴趣:
执行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,我们只需要撤消上一次更改