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

时间:2013-02-23 22:20:22

标签: php rest authentication symfony restful-authentication

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

用户提供商

我几乎使用了 FOSUserBundle ,但我甚至没有为我的用户提供电子邮件地址,而且我不需要增加的功能或复杂功能。

所以我只是使用entity provider

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

在我实施实体用户提供程序之前,我的登录表单给了我有效的回复:正确的凭据没有产生错误,错误的凭据导致我的自定义“错误的用户/通过错误”。

现在,即使我提供了我知道正确的凭据,我得到的只是错误消息“Bad credentials”as if I'm implementing the UserAuthenticationProvider,但据我所知,我不是。我的自定义提供商directly implements the AuthenticationProviderInterface

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

文件

的相关部分 security.yml

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

修改

This might prove useful。这是主分支上的差异......

    自定义身份验证提供程序(WordnikProvider)仍然执行时,
  • 来自(a473d354)
  • 主分支(ddcfeae2)上的最新提交,其中不再执行身份验证提供程序。

编辑2

我发现了更多的断点:

  1. 在登录表单POST上,使用UsernamePasswordToken调用WordnikProvider#supports,从而返回false
  2. 在登录表单POST上构建WordnikListener,但从不调用其他方法(attemptAuthenticationrequiresAuthentication)。然而,WordnikFactory#createListener也永远不会被召唤!聆听者的构建是一个奇迹。
  3. 但是在login_check GET上,WordnikListener#requiresAuthentication被叫。

1 个答案:

答案 0 :(得分:1)

所以我们对此进行了长时间的讨论。基本问题是form_login服务干扰了wodnik服务。删除了form_login,事情开始变得更好了。

http://chat.stackoverflow.com/rooms/25251/discussion-between-montgomery-jean-and-cerad