自从升级到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;
}
UserProvider支持方法应该测试User类,而不是UserProvider。因此:
public function supportsClass($class)
{
return MyUser::class === $class;
}
(至少对我来说有趣的是,早期版本的3.4和4.4似乎都可以工作。先前的代码要么没有调用supports方法,要么没有检查返回值。这种问题花了很长时间才解决,有点奇怪。
我继续并发布了答案,因为我怀疑其他开发人员在升级时可能会遇到此问题。
我在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
真诚的,我认为现在它具有预期的行为;但正在破坏实施不良的自定义提供程序。
我希望这会有所帮助!