Silex“用户没有用户提供商”如何配置安全性

时间:2016-11-15 17:15:47

标签: silex

 $app->register(new SecurityServiceProvider(), array(
    'security.firewalls' => array(
        'admin' => array(
            'pattern' => '^/',
            'form' => array(
                'login_path' => '/login',
                'check_path' => '/login_check',
                'always_use_default_target_path' => true,
                'default_target_path' => '/profile'
            ),
            'logout' => true,
            'anonymous' => true,
            'users' => function () use ($app) {
                return new \App\UserProvider($app['dbs']['mysql']);
            },
        ),
    ),
'security.access_rules' => array(
    array('^/profile', 'ROLE_USER')
)
));

在Silex 2应用程序中,我已经能够在login_check中验证用户凭据,但是在重定向上是可怕的(对我而言)运行时异常“ContextListener.php第74行没有用户提供者”Symfony \部件\安全\核心\用户\用户”。

(我的'标准'用户提供商类)

class UserProvider implements UserProviderInterface {
private $conn;

public function __construct(Connection $conn)
{
    $this->conn = $conn;
}
public function loadUserByUsername($username)
{

  //  $app['monolog']->addInfo(sprintf("User '%s' registered.", $username));

    $stmt = $this->conn->executeQuery('SELECT * FROM users_wet4 WHERE email = ?', array(strtolower($username)));

    if (!$user = $stmt->fetch()) {
        throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username));
    }

    return new User($user['email'], $user['password'], explode(',', $user['roles']), true, true, true, true);

}
public function refreshUser(UserInterface $user)
{
    if (!$user instanceof \App\Security\User) {
        throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', get_class($user)));
    }

    return $this->loadUserByUsername($user->getUsername());
}
public function supportsClass($class)
{
    return $class === 'Symfony\Component\Security\Core\User\User';
}
}

我搜索过它似乎是这个问题的每个实例,看起来Symfony安装中最常见的解决方案是将安全性配置为指向自定义用户提供程序,但我没有看到任何与silex不同的示例。上面的方式:

    'users' => function () use ($app) {
            return new \App\UserProvider($app['dbs']['mysql']);
        },

(我在symfony的security.xml文件中看到过这种情况,这种提供程序配置缺少什么?)

    providers:
    main:
        entity: { class: FredUtilisateurBundle:User, property: login }

在进行身份验证后,是否有人可以帮助我了解“无用户提供商”的逻辑?

1 个答案:

答案 0 :(得分:0)

好的解决了,问题实际上就在这里:

 if (!$user instanceof \App\Security\User) {  

应该只是用户。

 if (!$user instanceof User) {

或您可能创建的任何自定义用户。

 \App\MyUser