2012-02-27 9 views
1

ユーザーが会社のWebサイトにアクセスするためにPHP/LDAPを使用するログインページがあります。以下では、ユーザーのADグループメンバシップを変数に格納し、後でユーザーがどのメンバシップに属しているかに応じてリダイレクトするステートメントを作成しました>PHPを使用してActive Directoryからユーザーのフルネームを取得する

ここで、 Active Directoryのユーザーのフルネームを保存し、後で使用するために保存します。 Active Directoryのユーザーのフルネームを別の変数に格納するために、以下の記述を変更するにはどうすればよいですか?何か案は??

// verify user and password 
if($bind = @ldap_bind($ldap, $user . $ldap_usr_dom, $password)) { 
    // valid 
    // check presence in groups 
    $filter = "(sAMAccountName=" . $user . ")"; 
    $attr = array("memberof"); 
    $result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server"); 
    $entries = ldap_get_entries($ldap, $result); 
    /* I would like to get and store the user's display name here somehow */ 
    ldap_unbind($ldap); 

    // check groups 
    foreach($entries[0]['memberof'] as $grps) { 
     // is manager, break loop 
     if (strpos($grps, $ldap_manager_group)) { $access = 2; break; } 

     // is user 
     if (strpos($grps, $ldap_user_group)) $access = 1; 
    } 

    if ($access != 0) { 
     // establish session variables 
     $_SESSION['user'] = $user; 
     $_SESSION['access'] = $access; 
     return true; 
    } else { 
     // user has no rights 
     return false; 
    } 

} else { 
    // invalid name or password 
    return false; 

ご協力いただきありがとうございます。

EDIT

はここで今ダミードメインのものと私の完全なPHPのページですが、私は構文エラーを取得していますし、私は問題をすることができます:(、ヘルプやアイデア?ありがとうアレックス初期支援します!

<?php 
function authenticate($user, $password) { 
    // Active Directory server 
    $ldap_host = "my FQDC DC"; 

    // Active Directory DN 
    $ldap_dn = "DC=something,DC=something"; 

    // Active Directory user group 
    $ldap_user_group = "WebUsers"; 

    // Active Directory manager group 
    $ldap_manager_group = "WebManagers"; 

    // Domain, for purposes of constructing $user 
    $ldap_usr_dom = "@mycompany.com"; 

// connect to active directory 
$ldap = ldap_connect($ldap_host); 
// verify user and password 
if($bind = @ldap_bind($ldap, $user . $ldap_usr_dom, $password)) { 
// valid 
// check presence in groups 
    $filter = "(sAMAccountName=" . $user . ")"; 
    $attr = array("memberof","givenname"); 
    $result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server"); 
    $entries = ldap_get_entries($ldap, $result); 
    $givenname = $entries[0]['givenname']; 
    ldap_unbind($ldap); 

    // check groups 
    foreach($entries[0]['memberof'] as $grps) { 
     // is manager, break loop 
     if (strpos($grps, $ldap_manager_group)) { $access = 2; break; } 

     // is user 
     if (strpos($grps, $ldap_user_group)) $access = 1; 
    } 

    if ($access != 0) { 
     // establish session variables 
     $_SESSION['user'] = $user; 
     $_SESSION['access'] = $access; 
     $_SESSION['givenname'] = $givenname; 
     return true; 
    } else { 
     // user has no rights 
     return false; 
    } 

} else { 
    // invalid name or password 
    return false; 
} 

?> 
+0

エラーを投稿できますか? –

+0

こんにちはアレックス、私は最後に括弧を欠いていた。新人ミスには申し訳ありません。 :Sあなたのお手伝いをありがとう! – user1236435

答えて

2

Tこれ:

// verify user and password 
if($bind = @ldap_bind($ldap, $user . $ldap_usr_dom, $password)) { 
    // valid 
    // check presence in groups 
    $filter = "(sAMAccountName=" . $user . ")"; 
    $attr = array("memberof","givenname"); 
    $result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server"); 
    $entries = ldap_get_entries($ldap, $result); 
    $givenname = $entries[0]['givenname'][0]; 
    ldap_unbind($ldap); 

    // check groups 
    foreach($entries[0]['memberof'] as $grps) { 
     // is manager, break loop 
     if (strpos($grps, $ldap_manager_group)) { $access = 2; break; } 

     // is user 
     if (strpos($grps, $ldap_user_group)) $access = 1; 
    } 

    if ($access != 0) { 
     // establish session variables 
     $_SESSION['user'] = $user; 
     $_SESSION['access'] = $access; 
     $_SESSION['givenname'] = $givenname; 
     return true; 
    } else { 
     // user has no rights 
     return false; 
    } 

} else { 
    // invalid name or password 
    return false; 
} 
+0

Alex、私はあなたがコーディングについて正しいと思いますが、構文エラーが発生しています。問題を特定できません。エラーの任意のアイデア? – user1236435

0

この情報がお役に立てば幸いです。あなたは、LDAPから読み取るときに、あなたがフィールドを参照し、いくつかのセッション変数にマップすることができます。

$connect = @ldap_connect(LDAP_ADDRESS); 
    if (!$connect) return FALSE; 

    $bind = @ldap_bind($connect); 
    if (!$bind) return FALSE; 

    if ($resource = @ldap_search($connect,"dc=<yourdc>,dc=<yourdc>","uid=$user")) { 

     if (@ldap_count_entries($connect,$resource) == 1) { 

      if ($entry = @ldap_first_entry($connect,$resource)) { 

       if ($user_dn = @ldap_get_dn($connect,$entry)) { 

        if ($link = @ldap_bind($connect,$user_dn,$password)) { 

         $_SESSION['user'] = $user; 

        } 
       } 
      } 
     } 
    } 

    @ldap_close($connect); 
0

古いスレッドをバンプする。私は名前と姓を与え得るために必要と属性に「SN」を追加し、このような別のスクリプトで、後で参照するためにセッション変数に追加:

私は他のスクリプトでセッション変数にアクセスする方法:

$givenname = $_SESSION['givenname']; 
$surname = $_SESSION['sn']; 
$name = "{$givenname} {$surname}"; 

以前の認証スクリプトへの更新:

// verify user and password 
if($bind = @ldap_bind($ldap, $user . $ldap_usr_dom, $password)) { 
    // valid 
    // check presence in groups 
    $filter = "(sAMAccountName=" . $user . ")"; 
    $attr = array("memberof","givenname","sn"); 
    $result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server"); 
    $entries = ldap_get_entries($ldap, $result); 
    $givenname = $entries[0]['givenname'][0]; 
    $surname = $entries[0]['sn'][0]; 
    ldap_unbind($ldap); 

    // check groups 
    foreach($entries[0]['memberof'] as $grps) { 
     // is manager, break loop 
     if (strpos($grps, $ldap_manager_group)) { $access = 2; break; } 

     // is user 
     if (strpos($grps, $ldap_user_group)) $access = 1; 
    } 

    if ($access != 0) { 
     // establish session variables 
     $_SESSION['user'] = $user; 
     $_SESSION['access'] = $access; 
     $_SESSION['givenname'] = $givenname; 
     $_SESSION['sn'] = $surname; 
     return true; 
    } else { 
     // user has no rights 
     return false; 
    } 

} else { 
    // invalid name or password 
    return false; 
} 
関連する問題