目前我的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
我想要做的是检查我使用LDAP
登录的用户(如my previous question所示)是否在我的users
表中有一个字段,以及是否不要使用用户名自动创建一个并自动将其归结为Rails所做的user_id
并从LDAP
获取一个字段并将其放入我的SQLSERVER DB
,问题出在我登录时使用我的帐户它只是将我重定向到'/'(root),没有任何错误通知,也没有在我的database
上创建新行
我正在使用SqlServer Management Studio
,我的用户表包含以下字段:id NumeroEmpregado nome created_at updated_at
我想从NumeroEmpregado
(LDAP中的属性为LDAP
)自动提供title
。我稍后会担心,我希望nome
成为表格中给出的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 %>
答案 0 :(得分:0)
更新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
属性中。
答案 1 :(得分:0)
我认为你也想重写用户的创建,因为基本上你是先尝试创建它,然后再调用find或create。你可以用同样的方法拥有它,因此它是main.todos
。您可能希望确保用户也已创建/存在(find_or_create_by
将返回true)。
.persisted?