2015-05-04 53 views
3

大家好,我很抱歉如果問題是愚蠢的。我對Symfony(2.6)很新,我的第一個項目需要用戶從AD進行身份驗證。Symfony 2.6 FR3DLdapBundle。由於系統無法處理身份驗證請求

無論我做什麼,我總是收到:由於系統問題,無法處理身份驗證請求。

security.yml

encoders: 
    FOS\UserBundle\Model\UserInterface: sha512 


role_hierarchy: 
    ROLE_ADMIN:  ROLE_USER 
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 

providers: 
    chain_provider: 
     chain: 
      providers: [fos_userbundle, fr3d_ldapbundle] 

    fr3d_ldapbundle: 
     id: fr3d_ldap.security.user.provider 

    fos_userbundle: 
     id: fos_user.user_provider.username 

firewalls: 
main: 

    pattern: ^/ 
    fr3d_ldap: ~ 
    form_login: 
#   check_path: fos_user_security_check 
#   login_path: fos_user_security_login 
     always_use_default_target_path: true 
     default_target_path: /main 
     provider: chain_provider 
    logout: 
     path: fos_user_security_logout 
     target: /login 
    anonymous: ~ 

access_control: 
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

config.yml

fr3d_ldap: 
driver: 
    host:    192.168.137.200 
    port:    50000 
    username:   DOMAIN\Admnistrator # Optional 
    password:   pass_here # Optional 

user: 
baseDn: OU=HP,OU=MANA,DC=DOMAIN,DC=com 
filter: (&(ObjectClass=Person)) 
attributes:   # Specify ldap attributes mapping [ldap attribute, user object method] 
     - { ldap_attr: uid, user_method: setUsername } 
     - { ldap_attr: mail, user_method: setEmail } 

實體/ User類

/** 
* @ORM\Entity 
* @ORM\Table(name="mdr_user") 
*/ 
class User extends BaseUser implements LdapUserInterface 
{ 
/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

/** 
* @ORM\Column(type="string", nullable=true) 
*/ 
protected $name; 

/** 
* Ldap Object Distinguished Name 
* @ORM\Column(type="string", length=128) 
* @var string $dn 
*/ 
private $dn; 

public function __construct() 
{ 
parent::__construct(); 
if (empty($this->roles)) { 
    $this->roles[] = 'ROLE_USER'; 
} 
} 

public function setName($name) { 
$this->name = $name; 
} 

/** 
* {@inheritDoc} 
*/ 
public function setDn($dn) 
{ 
$this->dn = $dn; 
} 

/** 
* {@inheritDoc} 
*/ 
public function getDn() 
{ 
return $this->dn; 
} 
} 

,如果我不落實Lda與pUserInterface,數據庫認證正常,但總是如果我使用除了mysql條目以外的任何其他東西我得到該錯誤。你能幫我解決嗎? 欣賞它。

回答

1

嘗試這樣做對你loginAction()

\Doctrine\Common\Util\Debug::dump($this->getDoctrine()->getEntityManager()->find('AppBundle:User', 1)); 

你可能會看到可能的錯誤。這對我有用。

1

什麼固定的這對我來說是增加:

implements UserInterface, \Serializable 

到我的實體類的聲明,然後添加所需的方法的實體在底部的末尾:

/** 
* @return null 
*/ 
public function getSalt(){ 
    return null; 
} 

/** 
* @return array 
*/ 
public function getRoles(){ 
    return array('ROLE_USER'); 
} 

public function eraseCredentials(){ 

} 

/** 
* @return string 
*/ 
public function serialize(){ 
    return serialize(array($this->id, $this->username, $this->password)); 
} 

/** 
* @param string $serialized 
*/ 
public function unserialize($serialized) { 
    list($this->id, $this->username,$this->password) = unserialize($serialized); 
}