gpt4 book ai didi

php - LDAP的Codeigniter错误处理

转载 作者:行者123 更新时间:2023-12-03 07:49:50 24 4
gpt4 key购买 nike

如果有人为我们的Intranet登录名输入错误的LDAP句柄,我试图找出一种方法来管理由codeigniter抛出的错误。

我们的登录是相当标准的。

登录名:firstname.lastname(所有小写字母用句点分隔)

密码:至少10个字符长,需要1个大写字母

一切正常,这确实是一个小问题,但是如果有人搞砸了他们的密码或登录名,我会收到标准的难看的codeigniter错误

A PHP Error was encountered

Severity: Warning

Message: ldap_bind(): Unable to bind to server: Invalid credentials

Filename: controllers/Login.php

Line Number: 28

Backtrace:

File: /home/edit/internal/application/controllers/Login.php Line: 28 Function: ldap_bind

File: /home/edit/internal/public_html/index.php Line: 315 Function: require_once



我该如何做才能正确发送错误消息(类似于以下内容:您输入了错误的登录详细信息。请记住,这是与登录工作站相同的信息。)

并将其替换为难看的codeigniter错误。

以下是当前使用的代码...

请注意,DOMAINHERE是我的实际域的替代品。
if( $this->input->post( 'login' ) ){

if ($this->form_validation->run())
{
$ldap = ldap_connect( 'DOMAINHERE' ); // Your domain or domain server

if( ! $ldap )
{
// Put something here
}
ldap_set_option( $ldap, LDAP_OPT_PROTOCOL_VERSION, 3 ); // Recommended for AD

$ldapRDN = $this->input->post('username').'@DOMAINHERE.com';
$ldapPWD = $this->input->post('password');

// Now try to authenticate with credentials provided by user
if ( ! ldap_bind( $ldap, $ldapRDN, $ldapPWD) )
{
echo "LDAP Bind Failed.";
$data['error'] = TRUE;

}
else
{
if ( $this -> user_model -> user_exists( $this -> input -> post( 'username' ) ) ) {

$this -> user_model -> process_login();
$this->session->set_userdata('loggedin', TRUE);
redirect( 'welcome' );

} else {

$add_user = $this -> user_model -> set_user_to_db();
if ( $add_user ) {

$this -> session -> set_userdata( 'loggedin', TRUE);
redirect( 'welcome' );

} else {

$this -> session -> set_userdata( 'alert', 'Was unable to add user to the database, please try again later' );
$this -> session -> set_userdata( 'alert_type', 'error' );
redirect( 'login' );

}

}

}
}

}

编辑:我的目标不是抑制警告,实际上在部署过程中确实将其关闭,而是捕获引发错误的实例,因此我需要进行检查。

最佳答案

编辑:我不知道Codeigniter,但是我使用了ldap函数,并且我知道它们在失败时不会返回有用的结果。

理想情况下,应该在生产环境中禁用警告,这样就不会看到PHP警告,但是要辨别该警告是由LDAP提出的,您可能必须发挥创造力。该代码显示了引发错误的两个地方,它设置错误级别以隐藏警告,然后具有一种机制来测试ldap函数是否突击了警告。

user_error('Raise an error');
// Suppress Warnings
$previousErrorReportingLevel = error_reporting();
error_reporting( error_reporting() & ~E_WARNING );
$previousError = error_get_last();
if(isset($_POST['username'],$_POST['password']) === true and $ldap_connection = ldap_connect("DOMAINHERE") and $ldap_bind = ldap_bind($ldap_connection,$_POST['username'],$_POST['password']))
{
var_dump($ldap_connection);
var_dump($ldap_bind);
}
else
{
$lastError = error_get_last();
// You can either look for a specific message
if( $lastError['message'] === 'ldap_bind(): Unable to bind to server: Invalid credentials' )
{
echo("Login Credential Error");
}
// or look that the last error is different from the previously recorded error
elseif( $lastError !== $previousError )
{
echo("LDAP Connection error");
}
}
// Restore Error Reporting Level
error_reporting( $previousErrorReportingLevel );
user_error('Raise an error');

关于php - LDAP的Codeigniter错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36271525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com