我的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。这是主分支上的差异......
编辑2
我发现了更多的断点:
false
。WordnikListener
,但从不调用其他方法(attemptAuthentication
,requiresAuthentication
)。然而,WordnikFactory#createListener
也永远不会被召唤!聆听者的构建是一个奇迹。login_check
GET上,WordnikListener#requiresAuthentication
被叫。答案 0 :(得分:1)
所以我们对此进行了长时间的讨论。基本问题是form_login服务干扰了wodnik服务。删除了form_login,事情开始变得更好了。
http://chat.stackoverflow.com/rooms/25251/discussion-between-montgomery-jean-and-cerad