2012-07-24 66 views
0

我试图实现PHP-LDAP身份验证来验证和验证用户。我使用下面的代码。但是,如果密码输入不正确或域名未提供用户名(以username @ domain或domain \ username的形式),密码提示不会显示。它总是显示“授权失败”。如果用户提供正确的用户名@域名和密码,他们可以登录。代码:PHP LDAP;如果密码输入不正确或未提供域名,密码提示不会出现

session_start(); 

if (strlen(@$_SERVER['PHP_AUTH_USER']) == 0 || strlen(@$_SERVER['PHP_AUTH_PW']) == 0) { 
    header('WWW-Authenticate: Basic realm="test"'); 
    header('HTTP/1.0 401 Unauthorized'); 
    echo '<h1>Authorization required</h1>'; 
    exit; 
} else { 
    $ldaprdn = $_SERVER['PHP_AUTH_USER']; 
    $ldappass = $_SERVER['PHP_AUTH_PW']; 
    $ldap_server = 'ldap_server_add'; 
    $ldapconn = ldap_connect("ldap_server_add") or die("Could not connect to ".$ldap_server." server."); 
    $ldapbind = @ldap_bind($ldapconn, $ldaprdn, $ldappass); 

    if ($ldapbind) { 
     if (strrchr($_SERVER['PHP_AUTH_USER'], '@') || strrchr($_SERVER['PHP_AUTH_USER'], '\\')) { 
      if (strrchr($_SERVER['PHP_AUTH_USER'], '@')) { 
       $t = explode('@', $_SERVER['PHP_AUTH_USER']); 
       $_SESSION['userid'] = $t[0]; 
      } else { 
       $t = explode('\\', $_SERVER['PHP_AUTH_USER']); 
       $_SESSION['userid'] = $t[1]; 
      } 
     } 
    } else { 
     echo "<h1>Authorization failed</h1>"; 
    } 
} 

我找不出这个问题。请帮帮我。

回答

0

得到了解决,只是一个简单的伎俩,改变了上面的代码下面:

session_start(); 

function authenticate() { 
    header('WWW-Authenticate: Basic realm="test"'); 
    header('HTTP/1.0 401 Unauthorized'); 
    echo '<h1>Authorization required</h1>'; 
    exit; 
} 

if (strlen(@$_SERVER['PHP_AUTH_USER']) == 0 || strlen(@$_SERVER['PHP_AUTH_PW']) == 0) { 
    authenticate(); 
} else { 
    $ldaprdn = $_SERVER['PHP_AUTH_USER']; 
    $ldappass = $_SERVER['PHP_AUTH_PW']; 
    $ldap_server = 'ldap_server_add'; 
    $ldapconn = ldap_connect("ldap_server_add") or die("Could not connect to ".$ldap_server." server."); 
    $ldapbind = @ldap_bind($ldapconn, $ldaprdn, $ldappass); 

    if ($ldapbind) { 
     if (strrchr($_SERVER['PHP_AUTH_USER'], '@') || strrchr($_SERVER['PHP_AUTH_USER'], '\\')) { 
      if (strrchr($_SERVER['PHP_AUTH_USER'], '@')) { 
       $t = explode('@', $_SERVER['PHP_AUTH_USER']); 
       $_SESSION['userid'] = $t[0]; 
      } else { 
       $t = explode('\\', $_SERVER['PHP_AUTH_USER']); 
       $_SESSION['userid'] = $t[1]; 
      } 
     } 
    } else { 
     authenticate(); 
    } 
}