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

问题描述 投票:1回答:1

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

我知道用户已登录,因为我可以从登录页面抓取用户的信息。

这真的很奇怪,因为这不会一直发生。它似乎随机且难以复制。

我已经研究了这个问题好几天了,无法弄清楚为什么会这样。寻找一些建议。

谢谢。

Edit-1 added code

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 }}
php symfony redirect login fosuserbundle
1个回答
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'));

我建议这个的唯一原因是因为登录后的默认路由会导致问题。

© www.soinside.com 2019 - 2024. All rights reserved.