在 Silex 上为 SecurityUserProvider 使用实体

Using Entity for SecurityUserProvider on Silex

在 silex 上,当我将简单的 UserProvider 与 Doctrine ORM(只是 DBAL)一起使用时,我的身份验证有效:

$app['security.firewalls']=array(
 'app_secure' => array(
    'pattern' => '^/app/',
    'form' => array(
        'login_path' => '/login',
        'check_path' => '/app/login_check',
        'always_use_default_target_path' => true,
        'default_target_path' => '/app/'
        ),

    'logout' => array(
        'logout_path' => '/app/logout',
        'target_url' => "/login",
        'invalidate_session'=> "true"
        ),

    'users' => $app->share(function() use ($app) {
        return new App\Service\UserProvider($app['db']);
    })
  ),
);

关于 Silex 文档,我已阅读:

If you are using the Doctrine ORM, the Symfony bridge for Doctrine provides a user provider class that is able to load users from your entities.

所以我尝试使用实体(使用 dflydev Doctrine ORM 服务提供商),但我找不到如何配置我的防火墙:

'users' => $app->share(function() use ($app) {
            $em = $app['orm.em'];
            return $em->getRepository('MyProject\Entity\User');
        })  

这个解决方案 return 我出错了:attempts a UserProvider.

One of my sources : https://groups.google.com/forum/#!topic/silex-php/k-0X-BdG6Zw

我做错了什么?

谢谢

As stated in the docs:

The users setting can be defined as a service that returns an instance of UserProviderInterface

您必须确保用户存储库正在实施 UserProviderInterface

为了使用 Doctrine one(谨慎使用,我从未使用过!),您首先需要安装 DoctrineBridge (composer require symfony/doctrine-bridge 2.7),然后配置 Doctrine user provider:

<?php

$app['security.firewall'] = array(
  //...
  'users' => function() use ($app) {
    return new Symfony\Bridge\Doctrine\Security\User\EntityUserProvider($app['registry_manager'], 'MyProject\Entity\User');
  }

请注意,您需要一个 ManagerRegistry 实例,您可以查看此 registry manager provider 或自己创建一个。