成功登录后,Symfony重定向到登录...有时

时间:2018-09-04 16:02:19

标签: php symfony redirect login fosuserbundle

我遇到了Symfony 3.3.9的问题。有时,并非总是如此,当用户使用正确的用户名和密码登录时,它会像应有的那样重定向到主页,然后又返回登录页面。

我知道用户已经登录,因为我可以用树枝从登录页面中获取用户的信息。

这真的很奇怪,因为这并非一直存在。似乎是随机的,很难复制。

几天来我一直在研究这个问题,无法弄清楚为什么会这样。寻找一些建议。

谢谢。

Edit-1添加了代码

Edit-2

当我重定向到登录名时,我尝试键入主页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 }}

1 个答案:

答案 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'));

我建议这样做的唯一原因是因为登录后的默认路由给您造成了问题。