php - LDAP的Codeigniter错误处理

标签 php codeigniter error-handling ldap

如果有人为我们的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/

相关文章:

php - 尝试在 codeigniter 事件记录中附加(添加到)小时列

php - 用于从方括号获取信息的正则表达式

php - 从数据库中获取集合类型字段 - Agile Toolkit

javascript - 使用 gulp 设置配置文件。站点加载但 css 注入(inject)没有发生。我该如何解决?

php - 代码点火器。从数据库中获取3个表中的值(多对多)

javascript - 使用异步等待获取失败时如何捕获状态代码

php - CakePHP 和 Twitter Bootstrap 工具提示

php - 如何使用 CodeIgniter 格式化日期

sql - Informix SQL错误-为什么此UPDATE语句不起作用?

javascript - 检查字段是否至少包含一些数字