Php Symfony2实体用户提供程序覆盖自定义身份验证提供程序

Php Symfony2实体用户提供程序覆盖自定义身份验证提供程序,php,rest,authentication,symfony,restful-authentication,Php,Rest,Authentication,Symfony,Restful Authentication,现在我的Symfony2自定义身份验证提供程序 用户提供商 我几乎使用了FOSUserBundle,但我甚至没有我的用户的电子邮件地址,我也不需要增加功能或复杂性 所以我只是用了这个 我将编码器设置为纯文本,因为API客户机库为我处理这一问题,但遗憾的是,另一个障碍是:用户现在似乎正在根据这些用户记录进行身份验证 在我实现实体用户提供程序之前,我的登录表单给了我有效的响应:正确的凭据不会产生错误,错误的凭据会导致我的自定义“错误的用户/传递错误” 现在,即使我提供了我知道是正确的凭据,我得到的只

现在我的Symfony2自定义身份验证提供程序

用户提供商

我几乎使用了FOSUserBundle,但我甚至没有我的用户的电子邮件地址,我也不需要增加功能或复杂性

所以我只是用了这个

我将编码器设置为纯文本,因为API客户机库为我处理这一问题,但遗憾的是,另一个障碍是:用户现在似乎正在根据这些用户记录进行身份验证

在我实现实体用户提供程序之前,我的登录表单给了我有效的响应:正确的凭据不会产生错误,错误的凭据会导致我的自定义“错误的用户/传递错误”

现在,即使我提供了我知道是正确的凭据,我得到的只是错误消息“坏凭据”,但据我所知,我不是。我的自定义提供者

因此,目前我假设我错误地实现了实体用户提供程序,因此它以某种方式覆盖了我的自定义身份验证提供程序。同时配置实体用户提供程序和自定义身份验证提供程序的正确方法是什么

文件

security.yml的相关章节

编辑

。这是主分支上的一个差异

  • 当自定义身份验证提供程序()仍被执行时(a473d354)
  • 主分支(ddcfeae2)上的最新提交,其中不再执行身份验证提供程序
编辑2

我发现了更多的断点:

  • 在登录表单POST上,正在使用UsernamePasswordToken调用,因此返回
    false
  • 在登录表单POST上,构建了
    WordnikListener
    ,但它的其他方法(
    attemptAuthentication
    RequiredAuthentication
    )从未被调用。然而,
    WordnikFactory#createListener
    也从未被调用过!令人惊奇的是,听者是被构造出来的
  • 但是,在登录检查时,会调用
    WordnikListener#requireAuthentication

  • 所以我们就这个问题进行了长时间的讨论。基本问题是form_登录服务干扰了wodnik服务。删除了form_登录,情况开始好转


    form_登录服务几乎假设您需要密码。所以,让自己成为一个编码器,它说没有密码是好的。这应该让您更进一步。Cerad,实际上问题似乎来自UserAuthenticationProvider,正如“错误凭据”所示。虽然这对我来说是一个完全的谜,为什么那个提供商被加载!我不认为编码器是问题所在。AuthProvider通过用户提供程序加载用户,然后通过使用编码器检查密码对用户进行身份验证。如果您根本没有使用form_登录服务,请将其取出。但是看起来/play\u检查确实是由默认的身份验证处理程序处理的。啊,那就是问题所在!我希望播放检查由自定义身份验证提供程序处理!我认为form_login只是声明登录块的一般方式,它使用了一个表单,但我没有意识到它有什么含义。如果不是“form_login”,使用什么?返回$this->httpUtils->checkRequestPath($request,'/play');将play更改为play\u签入您的身份验证侦听器。这应该会让你开开心心。完整的文字记录在这里,不太长:
    encoders:
        WordRot\PlayBundle\Entity\User: plaintext
    
    providers:
        wordnik_users:
            entity: { class: WordRotPlayBundle:User, property: username }
    
    firewalls:
        wordnik_secured:
            pattern: ^/play
            logout: ~
            anonymous: ~
            # The next line specifies the custom authentication provider:
            wordnik: true 
            form_login:
                provider: wordnik_users
                login_path:  /login
                check_path:  /play_check
                # on success
                always_use_default_target_path: true
                default_target_path: /play