【问题标题】:Symfony 2 Security Component : use loadUserByUsername from controllerSymfony 2 安全组件:使用来自控制器的 loadUserByUsername
【发布时间】:2012-05-09 09:39:07
【问题描述】:

有没有办法使用

loadUserByUsername(UserProviderInterface 实现方法取决于安全配置)

通过服务或其他干净的方式从控制器操作?

我不使用 FOSUserBundle

谢谢!!

【问题讨论】:

    标签: php security symfony


    【解决方案1】:

    由于原生 EntityUserProvider 是 abstract,因此不可能...但是,如果您在自己的公共服务中定义方法 loadUserByUsername 并从 EntityUserProvider 调用它,则可以从任何 ContainerAware 类中使用它。

    【讨论】:

    • 谢谢@Pécé!事实上,我只需要使用安全组件行为来从用户名中检索用户。
    • 我设置了很多提供者(链式)...所以我想保留现有的链式提供者
    【解决方案2】:

    AFAIK Symfony2 不能直接访问已注册的用户提供者。一种肮脏的方法是,在load() 的DependencyInjection/BundleExtension.php 方法中解析security.yml,例如

    //DependencyInjection/BundleExtension.php
    public function load(array $configs, ContainerBuilder $container)
    {
        //...
        //parse security.yml
        //create an array mapping each provider keys in the firewall to the providers 
        //set the array as global parameter using $container->setParameter('provider.mappings', $array)
    }
    

    然后在控制器中你可以做

    $mapping = $this->container->getParameter('provider.mappings');
    $providerKey = $this->get('security.context')->getToken()->getProviderKey();
    $user = $mapping[$providerKey]->loadUserByUsername('user_name');
    

    【讨论】:

    • 谢谢@m2mdas,我会试试这个并保持联系!
    猜你喜欢
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多