我的RoR应用程序上有一个ldap连接,但现在如何在登录时检查用户?

我正在开发一个Ruby on Rails webapp,我正在尝试使用LDAP身份validation来validation我的用户,我已建立连接并使用LDAP ,但现在我找不到任何关于如何在线的示例或文档编写代码以在Ruby on Rails上针对我的LDAP对用户进行身份validation

我正在使用: Ruby v2.2Rails v5.0.3以及我用来连接到ldap的gem 'net-ldap', '~> 0.16.0'gem 'net-ldap', '~> 0.16.0'

这是我的登录表单,使用sqlserver DB进行身份validation,但我希望它能够针对我的LDAP DB进行身份validation:

 class SessionsController < ApplicationController def new end def create user = User.find_by_NumeroEmpregado(params[:NumeroEmpregado]) if user && user.authenticate(params[:password]) session[:user_id] = user.id redirect_to '/' else flash[:error] = "Erro! \nNúmero de Empregado e/ou password incorrecto(a)" redirect_to '/login' end end def destroy session[:user_id] = nil redirect_to '/index/new' end end 

users_controller.rb

 class UsersController < ApplicationController def new end def create user = User.new(user_params) if user.save session[:user_id] = user.id redirect_to '/' else flash[:error] = "Erro! \nNenhum dos campos pode ser deixado em branco" redirect_to '/signup' end end private def user_params params.require(:user).permit(:NumeroEmpregado, :nome, :password, :password_confirmation) end end 
  • 如何将此代码重新配置为使用LDAP DB身份validation?

您可以创建一个处理该过程的服务

应用程序/服务/ authenticate_user.rb

 class AuthenticateUser def initialize(user, password) @user = user @password = password end def call user_is_valid? end private def user_is_valid? ldap = Net::LDAP.new ldap.host = your_server_ip_address ldap.port = 389 ldap.auth(@user, @password) ldap.bind end end 

然后在您的控制器中使用它:

 class SessionsController < ApplicationController def new end def create username = params[:NumeroEmpregado] password = params[:password] name = "Some Name" # Change "Some Name" to set the correct name if AuthenticateUser.new(username, password).call user = User.create_with(nome: name).find_or_create_by(NumeroEmpregado: username) session[:user_id] = user.id redirect_to '/' else flash[:error] = "Erro! \nNúmero de Empregado e/ou password incorrecto(a)" redirect_to '/login' end end def destroy session[:user_id] = nil redirect_to '/index/new' end end 

AuthenticateUser.new(user, password).call将在提供有效的userpassword时返回false否则将返回false

这是仅涵盖LDAP身份validation的基本示例,您需要根据您的特定需求进行调整,包括exception处理。