Authentication Symfony在登录和重定向之间丢失身份验证会话

Authentication Symfony在登录和重定向之间丢失身份验证会话,authentication,symfony-4.2,Authentication,Symfony 4.2,我有一个应用程序,它有一个表单登录,一直工作良好 然后,我使用添加了一个api端。现在,我在web端的登录不再有效 这是我的security.yaml文件: security: # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers providers: users: entity: cla

我有一个应用程序,它有一个表单登录,一直工作良好

然后,我使用添加了一个api端。现在,我在web端的登录不再有效

这是我的security.yaml文件:

security:
    # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
    providers:
        users:
            entity:
                class: 'App\Entity\User'
                property: 'username'
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern: ^/
            anonymous: true
            guard:
                authenticators:
                    - App\Security\LoginFormAuthenticator
            form_login:
                login_path: app_login
                check_path: app_login
            logout:
                path: app_logout
                target: app_user_index
        secured_area:
            form_login:
                csrf_token_generator: security.csrf.token_manager
    encoders:
        App\Entity\User:
            algorithm: bcrypt
            cost: 12

    role_hierarchy:
        ROLE_ADMIN: ROLE_USER

            # activate different ways to authenticate

            # http_basic: true
            # https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate

            # form_login: true
            # https://symfony.com/doc/current/security/form_login_setup.html

    # Easy way to control access for large sections of your site
    # Note: Only the *first* access control that matches will be used
    access_control:
        # - { path: ^/delete, roles: ROLE_ADMIN }
        # - { path: ^/profile, roles: ROLE_USER }
我不确定我还需要发布什么,但我想不出还有什么东西可能会改变,导致它崩溃

如果我恢复到实现API之前的某个点,登录再次正常工作


可能是什么问题?

尝试比较文件前后的差异

你查过日志了吗?你有错误吗

因为这篇文章讨论了更改许多不同的文件,所以很难说。即,您发布的文件不包含文章中的任何内容,如^/api防火墙

也许在一个单独的文件夹中为文章中的行创建骨架线,然后逐个文件与项目进行比较,添加骨架材料

似乎您没有告诉主防火墙使用哪个提供商进行身份验证,所以您的api one可能会覆盖它

也就是说,您的main:form\u登录:provider:必须是用户,并且您的api可以使用fos\u用户包

只要字段名相同,两者都应该能够使用相同的提供程序

编辑: 1) 结帐交响乐

2) 决定是希望与主站点使用相同的用户,还是希望api使用不同的用户提供程序

3) 将防火墙相关部分中的form_登录指向要使用的用户提供程序

在上面,您有一个在提供者部分注册的提供者“用户”。 假设您希望主站点有单独的用户:
如果您阅读了本文,您会将“fos_userbundle”作为另一个提供者放在该部分中,并添加防火墙部分以允许oauth用于api。在“aouth\u authorize”上的“form\u login”下,有一个指向fos\u用户包的提供者。您还应该添加api路由来控制api响应的路由(模式:^/api感谢您的回复。您是否可以编辑您的答案,并举例说明如何在防火墙中设置提供商?我对Symfony 4非常陌生,这是我从头开始尝试的第一个项目。在中断代码一段时间后再次阅读您的答案后,我明白了您的意思,并回答了问题aw问题。非常感谢您的帮助。@Marcus,您似乎创建了一个未注册的帐户和一个已注册的帐户。您可以使用此页面合并帐户。这样,您就可以编辑自己的帖子,而不必排队。
security:
    # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
    providers:
        users:
            entity:
                class: 'App\Entity\User'
                property: 'username'
        fos_userbundle:
            id: fos_user.user_provider.username

    firewalls:
        oauth_token:
            pattern:    ^/oauth/v2/token
            security:   false
        oauth_authorize:
            pattern:    ^/oauth/v2/auth
            form_login:
                provider: fos_userbundle
                check_path: /oauth/v2/auth_login_check
                login_path: /oauth/v2/auth_login
                use_referer: true
        api:
            pattern:    ^/api
            fos_oauth:  true
            stateless:  true
            anonymous:  false

        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern: ^/
            anonymous: true
            guard:
                authenticators:
                    - App\Security\LoginFormAuthenticator
            form_login:
                provider: users
                login_path: app_login
                check_path: app_login
            logout:
                path: app_logout
                target: app_user_index
        secured_area:
            form_login:
                csrf_token_generator: security.csrf.token_manager

    encoders:
        App\Entity\User:
            algorithm: bcrypt
            cost: 12
        FOS\UserBundle\Model\UserInterface: bcrypt

    role_hierarchy:
        ROLE_ADMIN: ROLE_USER

            # activate different ways to authenticate

            # http_basic: true
            # https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate

            # form_login: true
            # https://symfony.com/doc/current/security/form_login_setup.html

    # Easy way to control access for large sections of your site
    # Note: Only the *first* access control that matches will be used
    access_control:
        # - { path: ^/delete, roles: ROLE_ADMIN }
        # - { path: ^/profile, roles: ROLE_USER }
        - { path: ^/api, roles: [ IS_AUTHENTICATED_FULLY ] }
security:
    # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
    providers:
        users:
            entity:
                class: 'App\Entity\User'
                property: 'username'

    firewalls:
        oauth_token:
            pattern:    ^/oauth/v2/token
            security:   false
        oauth_authorize:
            pattern:    ^/oauth/v2/auth
            form_login:
                provider: users
                check_path: /oauth/v2/auth_login_check
                login_path: /oauth/v2/auth_login
                use_referer: true
        api:
            pattern:    ^/api
            fos_oauth:  true
            stateless:  true
            anonymous:  false

        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern: ^/
            anonymous: true
            guard:
                authenticators:
                    - App\Security\LoginFormAuthenticator
            form_login:
                provider: users
                login_path: app_login
                check_path: app_login
            logout:
                path: app_logout
                target: app_user_index
        secured_area:
            form_login:
                csrf_token_generator: security.csrf.token_manager

    encoders:
        App\Entity\User:
            algorithm: bcrypt
            cost: 12

    role_hierarchy:
        ROLE_ADMIN: ROLE_USER

            # activate different ways to authenticate

            # http_basic: true
            # https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate

            # form_login: true
            # https://symfony.com/doc/current/security/form_login_setup.html

    # Easy way to control access for large sections of your site
    # Note: Only the *first* access control that matches will be used
    access_control:
        # - { path: ^/delete, roles: ROLE_ADMIN }
        # - { path: ^/profile, roles: ROLE_USER }
        - { path: ^/api, roles: [ IS_AUTHENTICATED_FULLY ] }