Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.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 3,一个应用程序中有2个防火墙_Php_Symfony - Fatal编程技术网

Php Symfony 3,一个应用程序中有2个防火墙

Php Symfony 3,一个应用程序中有2个防火墙,php,symfony,Php,Symfony,我在symfony 3中遇到了防火墙问题。三天以来,我一直在努力解决这个问题。我已经阅读了文档,并根据它做了所有事情,但应用程序并没有像我预期的那个样工作 目标:所有页面(登录页面除外)都需要登录用户。如果用户未登录,则应将其重定向到/login页面。就这些 根据这几页: 我已经用登录操作和表单创建了控制器。登录路径和检查路径使用相同的操作(根据文档)。可能是security.yml中的某个错误,因为它不能正常工作。我的设置: security: providers: in_me

我在symfony 3中遇到了防火墙问题。三天以来,我一直在努力解决这个问题。我已经阅读了文档,并根据它做了所有事情,但应用程序并没有像我预期的那个样工作

目标:所有页面(登录页面除外)都需要登录用户。如果用户未登录,则应将其重定向到/login页面。就这些

根据这几页:

我已经用登录操作和表单创建了控制器。登录路径和检查路径使用相同的操作(根据文档)。可能是security.yml中的某个错误,因为它不能正常工作。我的设置:

security:
providers:
    in_memory:
        memory:
            users:
                aaa:
                    password: aaa
                    roles: 'ROLE_ADMIN'
encoders:
    Symfony\Component\Security\Core\User\User: plaintext
firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    login_firewall:
        pattern:    ^/login
        anonymous: ~
#       form_login:
#           login_path: /login
#           check_path: /login
    secured_area:
        pattern:    ^/
        form_login:
            login_path: /login
            check_path: /login
            default_target_path: homepage
        logout:
            path:   /logout
            target: /login
#    access_control:
#        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
#        - { path: ^/, roles: IS_AUTHENTICATED_FULLY }
我的登录操作:

<?php
/**
 * @Route("/login", name="login")
 */
public function loginAction(Request $request)
{
    $authenticationUtils = $this->get('security.authentication_utils');
    // get the login error if there is one
    $error = $authenticationUtils->getLastAuthenticationError();
    // last username entered by the user
    $lastUsername = $authenticationUtils->getLastUsername();

    return $this->render(
        'security/login.html.twig',
        array(
            // last username entered by the user
            'last_username' => $lastUsername,
            'error'         => $error,
        )
    );
}
?>
修复:

我建议:

  • 完全删除登录防火墙
  • 允许在您的安全区域中使用匿名用户(匿名:~)
  • 取消对访问控制部分的注释(内容看起来不错)
  • 让我知道它是否有效

    备选解决方案:

    (这可能有效,但我不是100%确定)

  • 将您的检查路径更改为其他内容(例如/检查登录)
  • 为/check_登录创建一个空路由(类似于此处描述的注销路由:)
  • (确保此新路径位于“安全区域”防火墙后面!)
  • 一些解释

    您的问题可能可以通过以下页面进行解释:。上面写着:

    如果您使用多个防火墙,并且针对一个防火墙进行身份验证,则不会自动针对任何其他防火墙进行身份验证。不同的防火墙就像不同的安全系统

    这就解释了您的一些问题:如果您在登录防火墙中取消对表单登录的注释,您将只对登录页面进行身份验证!一旦转到另一个页面,您就不再进行身份验证,因为这是一个不同的安全上下文

    我不是100%确定你的问题1,但它可能会发生,因为你的“检查路径”也在防火墙登录防火墙后面,并且不安全。由于登录防火墙中没有表单登录,因此提交的登录表单将无法识别。

    修复:

    我建议:

  • 完全删除登录防火墙
  • 允许在您的安全区域中使用匿名用户(匿名:~)
  • 取消对访问控制部分的注释(内容看起来不错)
  • 让我知道它是否有效

    备选解决方案:

    (这可能有效,但我不是100%确定)

  • 将您的检查路径更改为其他内容(例如/检查登录)
  • 为/check_登录创建一个空路由(类似于此处描述的注销路由:)
  • (确保此新路径位于“安全区域”防火墙后面!)
  • 一些解释

    您的问题可能可以通过以下页面进行解释:。上面写着:

    如果您使用多个防火墙,并且针对一个防火墙进行身份验证,则不会自动针对任何其他防火墙进行身份验证。不同的防火墙就像不同的安全系统

    这就解释了您的一些问题:如果您在登录防火墙中取消对表单登录的注释,您将只对登录页面进行身份验证!一旦转到另一个页面,您就不再进行身份验证,因为这是一个不同的安全上下文


    我不是100%确定你的问题1,但它可能会发生,因为你的“检查路径”也在防火墙登录防火墙后面,并且不安全。由于您的登录防火墙中没有表单登录,因此提交的登录表单将无法识别。

    感谢您的首次修复。一切都很完美。你让我开心:)谢谢你的第一次治疗。一切都很完美。你让我开心:)
    security:
        providers:
            in_memory:
                memory:
                    users:
                        smt:
                            password: smt
                            roles: 'ROLE_ADMIN'
        encoders:
            Symfony\Component\Security\Core\User\User: plaintext
        firewalls:
            dev:
                pattern: ^/(_(profiler|wdt)|css|images|js)/
                security: false
            main:
                anonymous: ~
                form_login:
                    login_path: /login
                    check_path: /login
                    default_target_path: /
                logout:
                    path:   /logout
                    target: /login
        access_control:
            - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/, roles: IS_AUTHENTICATED_FULLY }