une - nodejs mysql tuto




lors de l'authentification de connexion avec LDAP/AD, comment puis-je créer une ligne utilisateur si elle est inexistante en utilisant des enregistrements AD (2)

Actuellement, j'ai ce code pour mes sessions_controller:

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

Ce que je veux faire est de vérifier si l'utilisateur que je me connecte avec le LDAP (comme indiqué dans ma question précédente ) a un champ dans ma table d' users et sinon de créer automatiquement un avec le nom d'utilisateur et l'attribuer automatiquement user_id que fait Rails et obtenir un champ du LDAP et le placer dans ma SQLSERVER DB , le problème est quand je me connecte avec mon compte Il me redirige juste à '/' (root) sans aucun avis d'erreur et sans créer une nouvelle ligne sur ma database

J'utilise SqlServer Management Studio et la table de mes utilisateurs contient les champs suivants: id NumeroEmpregado nome created_at updated_at

Je veux que NumeroEmpregado soit automatiquement donné à partir du LDAP (l'attribut dans LDAP est le title ). Je vais m'inquiéter avec ça plus tard, et je veux que nome soit le username donné dans le formulaire:

 <%= 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 %>
  • Comment puis-je faire ceci / Quelles sont les erreurs dans mon code?

Je pense que vous voulez aussi réécrire la création de l'utilisateur, parce que vous essayez de le créer en premier et que l'appel trouve ou crée à nouveau. Vous pouvez tout avoir dans la même méthode, donc c'est find_or_create_by . Vous voulez probablement vous assurer que l'utilisateur a été créé / existe aussi ( .persisted? Retournera vrai pour l'un ou l'autre).

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

Mettez à jour AuthenticaeUser pour qu'il ressemble à ceci:

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

Ensuite, utilisez-le dans votre contrôleur comme ceci:

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

Cela suppose que la valeur NumeroEmpregado est stockée dans l'attribut title de votre serveur LDAP.