我试图为一个非常奇怪的用例创建一个fosuserbundle,这是强制性的要求,所以没有外交空间。用例如下:
考虑到ldap可以成功地登录那些在ldap中退出但不能访问站点的人(但登录仍然成功),那么执行这种身份验证链的最佳方法是什么?
我在想一些可能的选择:
有什么暗示吗?
发布于 2014-11-07 11:19:59
我使用了Fr3DLdapBundle,它可以很容易地与FOSUserBundle结合(我使用的是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;
}https://stackoverflow.com/questions/26799710
复制相似问题