2014-11-07 3 views
0

아주 이상한 사용 사례를위한 fosuserbundle을 만들려고합니다. 이는 필수 조건이므로 외교 할 공간이 없습니다. 성공적으로 로그인 한 사용자 이름 후, fosuserbundle 이상한 사용을위한 ldap 설정

  • 사용자가 LDAP에 의해 생성
  • 사용자 레코드되지는 LDAP 로그인 JMS 메시지 -no 등록 양식에 의해 채워진 몽고 DB를 테이블에

    • 사용자 : 사용 사례는 다음과 같다 성공적으로 인증 체인을 수행하는 가장 좋은 방법이 될 수 있는지 LDAP에 exhist하지만 (그러나 로그인이 계속 성공) 사이트에 액세스 할 수있는 사람, 로그인 수있는 LDAP을 고려하여 MongoDB 문서

    에 대해 확인?

    나는 몇 가지 가능한 옵션에 대해 생각했다 :

    • 대화 형 로그인 이벤트에서 수신하지만, 이럴는 onSuccess 방법
    • 내부에 또 다른 검사를 할 수있는 사용자 정의 AuthenticationListener을 만들는 onSuccess 이벤트
    • 를 수정하는 방법이 없습니다
    • scheb 이중 요소 번들을 사용한 체인 인증

    어떤 힌트입니까?

  • 답변

    1

    FOSUserBundle과 쉽게 통합 할 수있는 Fr3DLdapBundle을 사용했습니다 (2.0.x 버전을 사용하고 있습니다. 이전 버전이 동일하거나 쉽게 설정 될지 전혀 모릅니다).

    LdapManager (기본값)은 내가 원한 것이 아닌 데이터베이스에 아직없는 사용자 (새 사용자)를 만듭니다 (원하는 사용자가 아닌 것 같습니다). 그래서 내 관리자를 추가했습니다. 데이터베이스에있는 사용자의 존재를 확인한 다음 적절하게 처리합니다.

    use FR3D\LdapBundle\Ldap\LdapManager as BaseLdapManager; 
    .. Other use stuff .. 
    
    class LdapManager extends BaseLdapManager 
    { 
        protected $userRepository; 
        protected $usernameCanonicalizer; 
    
        public function __construct(
         LdapDriverInterface $driver, 
         $userManager, 
         array $params, 
         ObjectRepository $userRepository, 
         CanonicalizerInterface $usernameCanonicalizer 
        ) { 
         parent::__construct($driver, $userManager, $params); 
    
         $this->userRepository = $userRepository; 
         $this->usernameCanonicalizer = $usernameCanonicalizer; 
        } 
    
        /** 
        * {@inheritDoc} 
        */ 
        public function findUserBy(array $criteria) 
        { 
         $filter = $this->buildFilter($criteria); 
         $entries = $this->driver->search(
          $this->params['baseDn'], $filter, $this->ldapAttributes 
         ); 
    
         if ($entries['count'] > 1) { 
          throw new \Exception('This search can only return a single user'); 
         } 
    
         if ($entries['count'] == 0) { 
          return false; 
         } 
    
         $uid = $entries[0]['uid'][0]; 
         $usernameCanonical = $this->usernameCanonicalizer->canonicalize($uid); 
    
         $user = $this->userRepository->findOneBy(
          array('usernameCanonical' => $usernameCanonical) 
         ); 
    
         if (null === $user) { 
          throw new \Exception('Your account has yet to be set up. See Admin.'); 
         } 
    
         return $user; 
        } 
    
    +0

    필자는 내 자신의 사용자 제공 업체를 제공했지만 실제로는 귀하의 솔루션이 symfony 및 번들 표준에보다 정확하고 순응적이라고 생각합니다. –

    관련 문제