如何调试symfony4身份验证失败

Nan*_*ish 6 php debugging symfony symfony4

我正在尝试按照symfony 4 文档设置传统的登录和注册表单.

使用注册表单,我似乎能够正确地将用户注册到arch linux上的mariaDB数据库中.


我正在使用symfony开发服务器.当我尝试使用注册用户登录时,我在登录页面上获取此HTML

由于系统问题,无法处理身份验证请求.

如果用户或密码不好或者我没有填写字段,我会收到同样的错误.

使用-vvv verboses启动symphony 4开发

2018-01-26T16:10:26+00:00 [info] Matched route "login".
2018-01-26T16:10:26+00:00 [info] Authentication request failed.
2018-01-26T16:10:26+00:00 [debug] Authentication failure, redirect triggered.
[Fri Jan 26 17:10:26 2018] 127.0.0.1:52250 [302]: /login
2018-01-26T16:10:26+00:00 [info] Matched route "login".
2018-01-26T16:10:26+00:00 [info] Populated the TokenStorage with an anonymous Token.
[Fri Jan 26 17:10:26 2018] 127.0.0.1:52252 [200]: /login
Run Code Online (Sandbox Code Playgroud)

使用Firefox的网络检查器,似乎登录帖子返回错误302.我不知道如何调试这个,或者如何获取更多的信息.


这是security.yaml

# config/packages/security.yaml                                                                           
security:                                                                                                 
  encoders:                                                                                               
    App\Entity\User:                                                                                      
      algorithm: bcrypt                                                                                   
  providers:                                                                                              
    our_db_provider:                                                                                      
      entity:                                                                                             
        class: App\Entity\User                                                                            
        property: username                                                                                
  firewalls:                                                                                              
    main:                                                                                                 
      provider: our_db_provider                                                                           
      pattern: ^/                                                                                         
      anonymous: ~                                                                                        
      form_login:                                                                                         
        login_path: login                                                                                 
        check_path: login                                                                                 
  access_control:                                                                                         
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }                                              
    - { path: ^/register$, role: IS_AUTHENTICATED_ANONYMOUSLY }                                           
    - { path: ^/, role: ROLE_USER }                                                                       
Run Code Online (Sandbox Code Playgroud)

我不使用用户名,因此我将其从User类和寄存器Controller中删除,并使user.getUsername返回用户电子邮件,如doc所示.

小智 5

您的问题如下:

property: username
Run Code Online (Sandbox Code Playgroud)

在安全性方面,只需将其替换为电子邮件,因为您不使用用户界面中的用户名变量.

要找到答案,请使用Web帮助程序包来分析返回的请求302.


Azh*_*tak 5

我遇到了同样的问题,想在 Epoch 接受的答案中添加一些细节。以下是使用symfony 的 Web 调试工具栏进行调试的步骤

注意:我使用的是FOSUserBundle,但这些步骤对于调试来说是通用的

  1. 打开调试工具栏,然后单击 302 Request 旁边的令牌以打开分析器,如图 在此处输入图片说明

  2. 这将打开分析器,其中包含有关当前请求的调试信息,在本例中为 302。但我们需要调试authentication failure发生的位置。所以点击Last 10左侧菜单,如图所示在此处输入图片说明

  3. 现在这将打开一个包含Last 10请求的页面。找到实际执行身份验证的请求。就我而言,它是POSTrequest /login_check。单击令牌以打开此请求的调试详细信息在此处输入图片说明

  4. 现在,查找security通道或您为身份验证日志/错误配置的内容。在此处输入图片说明

现在您可以查找身份验证失败的详细信息。希望这可以帮助其他有同样问题的人。谢谢!