2012-07-24 64 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(); 
    } 
}