2013-10-04 2 views
0

Я новичок в Laravel и даже Frameworks ... Я пробовал простую аутентификацию в Laravel. Теперь вот моя проблема. У меня есть сценарий входа LDAP в обычный PHP, и я хочу перейти на Laravel LDAP login. Может ли кто-нибудь помочь мне с кодом/пакетом или что-нибудь еще? Я буду очень благодарен за эту помощь.Преобразовать обычный код входа PHP LDAP в Laravel Код LDAP

function check_login($username,$password){ 
    if($username=="" || $password=="") 
     return 1 ; 
    $server1="ldap.xyz.com"; //server1 ip or dns 
    $server2="ldap.xyz.com"; //server2 ip or dns 

    $firstqry=array("alias,sn,givenname,mail,dn"); 
    $secqry=array("givenname,jobtitledescription,sn,alias,mail,l,employeenumber"); 

    $firstfilter="(alias=$username)"; 
    $searchin="o=XYZ,c=AN"; 


    $ldap=ldap_connect($server1,389); 
    if (!($res = @ldap_bind($ldap))) { 
     //echo "<b>Cannt Contact Server 1 :" .$server1 .", Now Contacting Server 2 :".$server2. ".....</b><br>"; 
     $laststatus=ldap_errno($ldap); 
     if($laststatus==81){ 
     $ldap=ldap_connect($server2,389); 
     if (!($res = @ldap_bind($ldap))) { 
      //echo "<b>Cannt Contact Server 2 :" .$server2 ."...</B><br>"; 
      $laststatus=ldap_errno($ldap); 
      if($laststatus==81){ 
       //echo "<b>Please Contact The Network Adminstartion!!</b><br>"; 
       return 2 ; // server not found 
      } 
     }else{ 
       $laststatus=ldap_errno($ldap); 
     } 
     } 
    }else{ 
     $laststatus=ldap_errno($ldap); 
    } 

    //echo "Connection :" .ldap_error($ldap)."<br>"; 
    if($laststatus==0){ 
     $sr=ldap_search($ldap,$searchin,$firstfilter,$firstqry); 
     $info = ldap_get_entries($ldap, $sr); 
     for ($i=0; $i<$info["count"]; $i++) { 
      $searchdn=$info[$i]["dn"]; 
      $searchalias=$info[$i]["alias"][0]; 
     } 

     if($searchdn){ 
      $secfilter=$firstfilter; 
      $sr2=ldap_search($ldap,$searchin,$secfilter); 
      $info2 = ldap_get_entries($ldap, $sr2); 
      $i=0; 
      if(count($info2)){ 
       if (!($res = @ldap_bind($ldap,$searchdn,addslashes($password)))) { 
        return 1 ; 
       }else{ 
        ldap_close($ldap); 
        return 0 ; 
       } 
      } 
     }else{ 
      return 1 ; 
     } 
    } 
} 

ответ

0

Я решил проблему, расширив класс Auth таким образом.

use Illuminate\Hashing\HasherInterface, 
    Illuminate\Auth\UserInterface, 
    Illuminate\Auth\UserProviderInterface; 

class XyzUserProvider implements UserProviderInterface { 

    /** 
    * The hasher implementation. 
    * 
    * @var \Illuminate\Hashing\HasherInterface 
    */ 
    protected $hasher; 

    /** 
    * The Eloquent user model. 
    * 
    * @var string 
    */ 
    protected $model; 

    /** 
    * Retrieve a user by their unique identifier. 
    * 
    * @param mixed $identifier 
    * @return \Illuminate\Auth\UserInterface|null 
    */ 
    public function retrieveById($identifier) 
    { 
     $user = new UserModel; 
     return $user->newQuery()->find($identifier); 
    } 

    /** 
    * Retrieve a user by the given credentials. 
    * 
    * @param array $credentials 
    * @return \Illuminate\Auth\UserInterface|null 
    */ 
    public function retrieveByCredentials(array $credentials) 
    { 
     // First we will add each credential element to the query as a where clause. 
     // Then we can execute the query and, if we found a user, return it in a 
     // Eloquent User "model" that will be utilized by the Guard instances. 
     $user = new UserModel; 
     $query = $user->newQuery(); 

     foreach ($credentials as $key => $value) 
     { 
      if (! str_contains($key, 'password')) $query->where($key, $value); 
     } 
     return $query->first(); 
    } 

    /** 
    * Validate a user against the given credentials. 
    * 
    * @param \Illuminate\Auth\UserInterface $user 
    * @param array $credentials 
    * @return bool 
    */ 
    public function validateCredentials(UserInterface $user, array $credentials) 
    { 
     $login_attempt = $this->validateLogin($credentials['username'],$credentials['password']); 
     if($login_attempt == 0) 
      return true; 
     else 
      return false; 
    } 

    public function validateLogin($username,$password) 
    { 
     if($username=="" || $password=="") 
      return 1 ; 
     $server1="ldap.xyz.com"; //server1 ip or dns 
     $server2="ldap.xyz.com"; //server2 ip or dns 

     $firstqry=array("alias,sn,givenname,mail,dn"); 
     $secqry=array("givenname,jobtitledescription,sn,alias,mail,l,employeenumber"); 

     $firstfilter="(alias=$username)"; 
     $searchin="o=XYZ,c=AN"; 


     $ldap=ldap_connect($server1,389); 
     if (!($res = @ldap_bind($ldap))) { 
      //echo "<b>Cannt Contact Server 1 :" .$server1 .", Now Contacting Server 2 :".$server2. ".....</b><br>"; 
      $laststatus=ldap_errno($ldap); 
      if($laststatus==81){ 
      $ldap=ldap_connect($server2,389); 
      if (!($res = @ldap_bind($ldap))) { 
       //echo "<b>Cannt Contact Server 2 :" .$server2 ."...</B><br>"; 
       $laststatus=ldap_errno($ldap); 
       if($laststatus==81){ 
        //echo "<b>Please Contact The Network Adminstartion!!</b><br>"; 
        return 2 ; // server not found 
       } 
      }else{ 
        $laststatus=ldap_errno($ldap); 
      } 
      } 
     }else{ 
      $laststatus=ldap_errno($ldap); 
     } 

     //echo "Connection :" .ldap_error($ldap)."<br>"; 
     if($laststatus==0){ 
      $sr=ldap_search($ldap,$searchin,$firstfilter,$firstqry); 
      $info = ldap_get_entries($ldap, $sr); 
      for ($i=0; $i<$info["count"]; $i++) { 
       $searchdn=$info[$i]["dn"]; 
       $searchalias=$info[$i]["alias"][0]; 
      } 

      if($searchdn){ 
       $secfilter=$firstfilter; 
       $sr2=ldap_search($ldap,$searchin,$secfilter); 
       $info2 = ldap_get_entries($ldap, $sr2); 
       $i=0; 
       if(count($info2)){ 
        if (!($res = @ldap_bind($ldap,$searchdn,addslashes($password)))) { 
         return 1 ; 
        }else{ 
         ldap_close($ldap); 
         return 0 ; 
        } 
       } 
      }else{ 
       return 1 ; 
      } 
     } 
    } 

} 
Смежные вопросы