proyectos ejemplos mysql ruby-on-rails ruby authentication ldap

mysql - ejemplos - django



al momento de la autenticación de inicio de sesión con LDAP/AD, ¿cómo puedo crear una fila de usuarios si no existe ninguno usando registros AD? (2)

Actualmente tengo este código para mi session_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

Lo que quiero hacer es verificar si el usuario que estoy iniciando sesión con LDAP (como se muestra en mi pregunta anterior ) tiene un campo en la tabla de mis users y si no crea automáticamente uno con el nombre de usuario y atribuyéndolo automáticamente user_id que hace Rails y obtener un campo del LDAP y ponerlo en mi SQLSERVER DB , el problema es cuando inicio sesión con mi cuenta Simplemente me redirige a ''/'' (raíz) sin ningún aviso de error y sin crear una nueva fila en mi database

Estoy usando SqlServer Management Studio y mi tabla de usuarios tiene los siguientes campos: id NumeroEmpregado nome created_at updated_at

Quiero hacer que NumeroEmpregado dé automáticamente desde LDAP (el atributo en LDAP es title ). Me preocuparé más tarde por eso, y quiero que nome sea ​​el username dado en el formulario:

<%= 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 %>

  • ¿Cómo puedo hacer esto / ¿Cuáles son los errores en mi código?

Actualice AuthenticaeUser para que se vea así:

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

Entonces úselo en su controlador de esta manera:

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

Esto supone que el valor NumeroEmpregado se almacena en el atributo de title dentro de su servidor LDAP.


Creo que también quieres volver a escribir la creación del usuario, porque básicamente estás tratando de crearlo primero, y la llamada encuentra o crea de nuevo. Puede tenerlo todo en el mismo método, por lo tanto, es find_or_create_by . Probablemente desee asegurarse de que el usuario también haya sido creado / existe ( .persisted? verdadero para cualquiera de los dos).

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