mysql - एलडीएपी/एडी के साथ लॉगिन प्रमाणीकरण पर मैं एक उपयोगकर्ता पंक्ति कैसे बनाऊं, अगर कोई एडी रिकॉर्ड का इस्तेमाल न करें




ruby-on-rails ruby (2)

इस तरह दिखने के लिए AuthenticaeUser अद्यतन करें:

class AuthenticateUser
  def self.call(*args)
    new(*args).call
  end

  def initialize(username, password)
    @username = "#{username}@company.com"
    @password = password
  end

  def call
    search_title_if_valid_user
  end

  private
  def search_title_if_valid_user
    ldap = Net::LDAP.new(
      host: server_ip_address,
      port: 389,
      base: "DC=corp,DC=com",   # change for your company values
      auth: { method: :simple, username: @username, password: @password }
    )

    ldap.search(attributes: ["title"]) if ldap.bind
  end
end

उसके बाद इसे अपने नियंत्रक में प्रयोग करें:

class SessionsController < ApplicationController
  def new
  end

  def create
    username = params[:nome]
    password = params[:password]

    title = AuthenticateUser.call(username, password)

    if title
      user = User.create_with(nome: username).find_or_create_by(NumeroEmpregado: title)
      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

यह मानता है कि NumeroEmpregado मान आपके LDAP सर्वर में title विशेषता में संग्रहीत है।

वर्तमान में मेरे सत्र_ नियंत्रक के लिए यह कोड है:

class SessionsController < ApplicationController
  def new
  end

  def create
    username = params[:nome]
    password = params[:password]
    name     = username 

    if AuthenticateUser.new(username, password).call
      user = User.create_with(nome: name).find_or_create_by(nome: user)
      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

मैं क्या करना चाहता हूं यह जांचना है कि क्या उपयोगकर्ता LDAP ( मेरे पिछले प्रश्न में दिखाया गया है) के साथ प्रवेश कर रहा है, मेरे users तालिका में एक फ़ील्ड है और यदि उपयोगकर्ता के नाम पर स्वचालित रूप से एक नहीं बना है और इसे स्वतः user_id कि रेल करता है और LDAP से फ़ील्ड लेता है और इसे मेरे SQLSERVER DB में डालता है, तब समस्या होती है जब मैं अपने खाते में लॉग इन करता हूं यह केवल बिना किसी त्रुटि नोटिस के '/' (रूट) पर रीडायरेक्ट करता है और एक नई पंक्ति मेरे database

मैं SqlServer Management Studio का उपयोग कर रहा हूं और मेरे उपयोगकर्ता तालिका में निम्न फ़ील्ड हैं: id NumeroEmpregado nome created_at updated_at

मैं NumeroEmpregado को स्वत: LDAP (एलडीएपी में विशेषता title से दिया जाता है) बनाने के लिए करना चाहता हूं। मैं उसके साथ बाद में चिंता करूंगा, और मैं चाहता हूं कि प्रपत्र में दिए गए username का username होना चाहिए:

 <%= form_tag '/login' do %>
  <div class="form-group">
    <div class="text">
      Número de Empregado: <br> 
      <%= text_field_tag :nome %><br>
      Password: <br>
      <%= password_field_tag :password %><br>
    </div>
  </div>
  <%= submit_tag "Submit", class: "button" %>
<% end %>
  • मैं यह कैसे कर सकता हूँ / मेरे कोड में त्रुटियां क्या हैं?

मुझे लगता है कि आप भी उपयोगकर्ता के निर्माण को फिर से लिखना चाहते हैं, क्योंकि मूल रूप से आप इसे पहले बनाने का प्रयास कर रहे हैं, और कॉलिंग फिर से ढूंढें या फिर से बनाएं आप एक ही विधि में इसे सब कर सकते हैं, इसलिए इसे find_or_create_by आप संभवतः यह सुनिश्चित करना चाहते हैं कि उपयोगकर्ता के रूप में भी बनाया गया / मौजूद है (या। के लिए सही होगा)।

if AuthenticateUser.new(username, password).call
  user = User.find_or_create_by(nome: username)
  if user.persisted?
    session[:user_id] = user.id
    redirect_to '/'
  else
    #...
  end
else
  flash[:error] = "Erro!              \nNúmero de Empregado e/ou password incorrecto(a)"
  redirect_to '/login'
end