我正在使用Symfony 4.0.5并为这样的特殊身份验证服务器创建了一个自定义用户提供程序:
class MyAuthProvider implements UserProviderInterface
{
...
}
然后我想在我的身份验证防护中使用它,但我不知道如何获取我的提供程序而不是默认的数据库提供程序。
class SomeAuthentication extends AbstractGuardAuthenticator
{
public function getUser($credentials, UserProviderInterface $userProvider)
{
// $userProvider should be MyAuthProvider
}
}
我之前通过security.yml注册了它:
security:
providers:
my_provider:
id: App\Security\MyAuthProvider
目前我的唯一解决方案是依赖注入我自己的提供者在" SomeAuthentication"的构造函数中。并且不使用getUser()中给定的$ userProvider,但这感觉不对。
答案 0 :(得分:2)
简单的错误配置,您可能没有设置防火墙的提供程序:
示例security.yml
security:
...
main:
pattern: ^/
provider: App\Security\MyAuthProvider
...
guard:
authenticators:
- your_guard
在警卫中,UserProviderInterface
参数将是您App\Security\MyAuthProvider
类的实例。
如果您愿意,可以将其参数化为更灵活:
parameters:
security.provider.class: App\Security\MyAuthProvider
security:
main:
pattern: ^/
provider: '%security.provider.class%'