7

我的 Symfony2 自定义身份验证提供程序现在似乎正在工作

用户提供者

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

所以我只是使用实体提供者

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

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

现在,即使我提供了我知道是正确的凭据,我得到的只是错误消息“错误凭据” ,就好像我正在实现 UserAuthenticationProvider 一样,但据我所知,我不是。我的自定义提供程序直接实现了 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

编辑

这可能证明是有用的。这是主分支上的差异......

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

编辑 2

我发现了更多断点:

  1. 在登录表单 POST 上,使用 UsernamePasswordToken 调用WordnikProvider#supports,从而返回false.
  2. 在登录表单 POST 上,WordnikListener已构造但它的其他方法 ( attemptAuthentication, requiresAuthentication) 从未被调用。然而WordnikFactory#createListener,也从未被调用!构造监听器是一个奇迹。
  3. 然而,在login_checkGET 上,WordnikListener#requiresAuthentication被调用。
4

1 回答 1

1

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

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

于 2013-02-28T01:38:55.520 回答