如何在身份验证保护中获得自定义用户提供程序?

时间:2018-03-09 08:31:16

标签: symfony

我正在使用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,但这感觉不对。

1 个答案:

答案 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%'