如何在Symfony 4上使用多个提供程序配置防火墙?

问题描述

我正在写这条消息,问您如何与多个用户提供商一起启动我的Symfony应用程序?这是我的安全Yaml:

security:
    encoders:
        App\Entity\User:
            algorithm: auto


    # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
    providers:
        chain_provider:
            chain:
                providers: [in_memory,app_user_provider]
        # used to reload user from session & other features (e.g. switch_user)
        app_user_provider:
            entity:
                class: App\Entity\User
                property: email
        in_memory:
            memory:
                users:
                    foo: { password: test,roles: [ 'ROLE_ADMIN' ] }
        # used to reload user from session & other features (e.g. switch_user)
#            memory:
#                users:
#                    admin: { password: '123412A',roles: ['ROLE_ADMIN']}
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
#            form_login:
#                csrf_token_generator : security.csrf.token_manager
            anonymous: true

            logout:
                path: app_logout
            guard:
                authenticators:
                    - App\Security\UtilisateurAuthenticator

                # where to redirect after logout
                # target: app_any_route

                # where to redirect after logout
                # target: app_any_route

            # activate different ways to authenticate
            # https://symfony.com/doc/current/security.html#firewalls-authentication

            # https://symfony.com/doc/current/security/impersonating_user.html
            # switch_user: true

    # 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: ^/Conversation,roles: [ROLE_ADMIN,ROLE_USER] }
         - { path: ^/admin,roles: ROLE_ADMIN }
         - { path: ^/login$,roles: IS_AUTHENTICATED_ANONYMOUSLY }
        # - { path: ^/profile,roles: ROLE_USER }

我收到此错误消息,如何解决?

未在“主”防火墙上显式配置“后卫”侦听器的提供程序 因为有一个以上的注册提供者,所以模棱两可。

解决方法

您只需要声明要在main防火墙中使用的用户提供者。它必须是使用providers键声明的变量之一。

# security.yaml
# ...

main:
    provider: chain_provider # or app_user_provider or in_memory
    form_login: 
    # ...

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...