我一直遇到Symfony 3.3.9的问题。有时,并非总是如此,当用户使用正确的用户名和密码登录时,它会像应该的那样重定向到主页面,然后再返回登录页面。
我知道用户已登录,因为我可以从登录页面抓取用户的信息。
这真的很奇怪,因为这不会一直发生。它似乎随机且难以复制。
我已经研究了这个问题好几天了,无法弄清楚为什么会这样。寻找一些建议。
谢谢。
当我被重定向到登录时,我尝试键入主页面url手动去那里。即使我已登录,这也不起作用。如果我等了一分钟左右,这确实有效。
我正在使用FOS用户包
这是我的config.yml
# fos bundle
fos_user:
db_driver: orm
firewall_name: main
user_class: Acme\Entity\User
这是我的security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_EMPLOYEE: [ROLE_USER]
ROLE_MANAGER: [ROLE_EMPLOYEE]
ROLE_ADMIN: [ROLE_MANAGER]
ROLE_SUPER_ADMIN: [ROLE_ADMIN,ROLE_ALLOWED_TO_SWITCH]
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
always_use_default_target_path: true
default_target_path: after_login
# if you are using Symfony < 2.8, use the following config instead:
# csrf_provider: form.csrf_provider
logout: true
anonymous: true
switch_user: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/administration/roe, role: ROLE_ADMIN }
- { path: ^/administration/generateaccessemployees, role: ROLE_ADMIN }
- { path: ^/administration/location, role: ROLE_ADMIN }
- { path: ^/administration/payroll/closepp, role: ROLE_ADMIN }
- { path: ^/administration/t4, role: ROLE_ADMIN }
- { path: ^/administration/eft, role: ROLE_ADMIN }
- { path: ^/administration/stubmessage, role: ROLE_ADMIN }
- { path: ^/administration/payroll_reminder, role: ROLE_ADMIN }
- { path: ^/administration, role: ROLE_MANAGER }
- { path: ^/admin/exit_impersonation, role: ROLE_PREVIOUS_ADMIN }
- { path: ^/admin, role: ROLE_SUPER_ADMIN }
在我的login_content.html.twig中,我能够看到:
{{ app.user.username }}
肯定需要查看一些代码,更具体地说,无论在登录时运行什么函数,都需要帮助找到问题的根源。
编辑:在security.yml中,您可以指定login_path,例如:
my_firewall:
pattern: ^/(secured_area)/
provider: my_provider
anonymous: ~
form_login:
login_path: my_login_path
default_target_path: /dashboard
在routing.yml中,您可以将路径映射为:
my_login_path:
pattern: /my/relative/url/for/login
defaults: { _controller: MySecurityBundle:Security:login }
那么你可以使用正常的路线,在你的具体情况下:
return $this->forward($this->generateUrl('my_login_path'));
我建议这个的唯一原因是因为登录后的默认路由会导致问题。