我遇到了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 }}
答案 0 :(得分:0)
肯定需要查看一些代码,更具体地讲,无论在登录时运行什么功能,以帮助找出问题的根源。
编辑: 在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'));
我建议这样做的唯一原因是因为登录后的默认路由给您造成了问题。