Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在使用用户实体进行身份验证时,如何在Symfony 4中使用独立的基本身份验证_Php_Symfony_Authentication_Basic Authentication - Fatal编程技术网

Php 在使用用户实体进行身份验证时,如何在Symfony 4中使用独立的基本身份验证

Php 在使用用户实体进行身份验证时,如何在Symfony 4中使用独立的基本身份验证,php,symfony,authentication,basic-authentication,Php,Symfony,Authentication,Basic Authentication,我正在尝试使用symfony4(nginx)为登台环境添加基本身份验证。不幸的是,它不太好用。如果在防火墙设置(security.yaml)中定义基本身份验证,它将自动使用防火墙中指定的提供程序。因此,Symfony使用基本身份验证作为实际登录。集成一个简单的基本身份验证应该不会那么困难吧?我误解了什么吗 我的目标: 两个独立的身份验证(用户之间没有相关性) 如果我通过基本身份验证登录,那么我应该能够通过实际登录页面与用户实体一起登录。该页面的行为应与您未登录且未使用基本身份验证时的行为相同

我正在尝试使用symfony4(nginx)为登台环境添加基本身份验证。不幸的是,它不太好用。如果在防火墙设置(
security.yaml
)中定义基本身份验证,它将自动使用防火墙中指定的提供程序。因此,Symfony使用基本身份验证作为实际登录。集成一个简单的基本身份验证应该不会那么困难吧?我误解了什么吗

我的目标:

  • 两个独立的身份验证(用户之间没有相关性)
  • 如果我通过基本身份验证登录,那么我应该能够通过实际登录页面与用户实体一起登录。该页面的行为应与您未登录且未使用基本身份验证时的行为相同
我试着整合几个五层楼

staging/security.yaml

security:
    providers:
        our_users:
            entity: { class: App\Entity\User\User, property: email }

        basic_auth:
            memory:
                users:
                    system: { password: 'testpw', roles: ['ROLE_BASIC_AUTH'] }

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        staging:
            provider: basic_auth
            http_basic:
                realm: "My Basic Auth"

        main:
            anonymous: ~

            form_login:
                provider: our_users
                login_path: my_login_path
                csrf_token_generator: security.csrf.token_manager
                default_target_path: homepage

            guard:
                provider: our_users
                authenticators:
                    - App\Security\LoginFormAuthenticator

    access_control:
        - { path: ^/admin, role: ROLE_ADMIN }
        - { path: ^/login$, role: ROLE_BASIC_AUTH }
        - { path: ^/$, role: IS_AUTHENTICATED_REMEMBERED }

我可以使用它通过基本身份验证对自己进行身份验证,但我在临时防火墙中。当我现在尝试登录时,总是失败。我认为这是因为防火墙中的表单没有分配给引用用户实体的验证器。而且它不会自动将防火墙切换到正确的防火墙

如果在页面上使用用户系统,实现基本身份验证的最佳实践是什么

谢谢你的推荐

编辑:


如果有人遇到同样的问题:我在我的案例中发现了问题。。看看被接受的答案的回答。谢谢你的帮助

一个URL只能由一个防火墙保护,第一个匹配的防火墙将被使用,这就是为什么会出现冲突

使用安全组件时,防火墙将根据请求匹配器的结果决定是否处理请求:第一个匹配请求的防火墙将处理该请求


最简单的解决方案可能是在web服务器上配置基本身份验证,例如或。

感谢您的回复!它第一次没有起作用,但发现了问题。我在主防火墙中有一行
http\u basic:~
。如果设置此选项,则在提交基本身份验证表单后,Symfony将尝试使用相同的凭据登录。当然,他在数据库里找不到。这会导致重定向,进而再次触发基本身份验证。它以无限循环结束。这很有趣,因为我在问题中删除了这一行,所以你们可以找出问题所在。我希望它也能帮助其他可能有同样问题的人。谢谢