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