首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于奇怪用例的fosuserbundle ldap配置

用于奇怪用例的fosuserbundle ldap配置
EN

Stack Overflow用户
提问于 2014-11-07 10:57:34
回答 1查看 583关注 0票数 0

我试图为一个非常奇怪的用例创建一个fosuserbundle,这是强制性的要求,所以没有外交空间。用例如下:

  • 由jms消息-no注册表单填充的mongo表中的用户
  • 用户通过ldap登录
  • 在对照mongodb文档检查成功登录用户名后,ldap未创建用户记录

考虑到ldap可以成功地登录那些在ldap中退出但不能访问站点的人(但登录仍然成功),那么执行这种身份验证链的最佳方法是什么?

我在想一些可能的选择:

  • 侦听交互式登录事件,但imho无法修改onSuccess事件
  • 创建自定义AuthenticationListener,以便在onSuccess方法中进行另一次检查
  • 基于scheb双因子丛的链认证

有什么暗示吗?

EN

回答 1

Stack Overflow用户

发布于 2014-11-07 11:19:59

我使用了Fr3DLdapBundle,它可以很容易地与FOSUserBundle结合(我使用的是2.0.x版本,我不知道前面的版本是否会这样做,或者设置起来也一样容易)。

LdapManager (默认情况下)中,如果数据库中还没有用户,则会创建一个新用户,这不是我想要的(而且似乎不是您想要的),所以我添加了自己的管理器,检查数据库中是否存在用户,然后相应地进行处理。

代码语言:javascript
复制
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;
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26799710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档