没有用户的用户提供者,symfony 3.4.37

问题描述 投票:1回答:2

自从升级到Symfony 3.4.37以来,我遇到了这个问题

没有用户“ Mybundle \ Myuser”的用户提供程序。

[使用3.4.36及更高版本,它运行良好。

security.yml

security:
  providers:
    myprovider:
        id: myuser.provider

services.yaml

myuser.provider:
    class: Mybundle\MyUserProvider
    public: true
    arguments: 
        - '@arg1'
    tags:
        - { name: monolog.logger, channel: app.oneid.provider }

关于如何解决此问题的任何想法?

编辑:我的用户提供程序的支持类:

public function supportsClass($class)
{
    return MyUserProvider::class === $class;
}
symfony symfony4
2个回答
1
投票

UserProvider支持方法应该测试User类,而不是UserProvider。因此:

public function supportsClass($class)
{
    return MyUser::class === $class;
}

(至少对我来说有趣的是,早期版本的3.4和4.4似乎都可以工作。先前的代码要么没有调用supports方法,要么没有检查返回值。这种问题花了很长时间才解决,有点奇怪。

我继续并发布了答案,因为我怀疑其他开发人员在升级时可能会遇到此问题。


0
投票

我在Symfony 4.4.3上遇到了相同的问题。问题出在我的自定义用户提供程序上的方法supportsClass上。关于如何解决该问题的一些解释:

之前(失败,带有所描述的异常):

public function supportsClass($class)
{
    return $class === UserInterface::class;
}

之后(工作正常,请使用最后一堂课:]:>

public function supportsClass($class)
{
    return $class === MyCustomModel::class;
}

我正在检查安全组件,并且我认为该问题是在下一次提交中引入的:https://github.com/symfony/security/commit/0cfaf60c0666e8967590d0dada80caa7f9b61b02#diff-0cd860ec03e139a658ed3c258b615f21

真诚的,我认为现在它具有预期的行为;但正在破坏实施不良的自定义提供程序。

我希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.