繁体   English   中英

Symfony无法验证

[英]Symfony cannot authenticate

我正在遵循Symfony食谱,并在“避免常见的陷阱”中说:

另外,如果您的防火墙不允许匿名用户(没有anonymous密钥),则需要创建一个特殊的防火墙,允许匿名用户登录页面

 firewalls: # order matters! This must be before the ^/ firewall login_firewall: pattern: ^/login$ anonymous: ~ secured_area: pattern: ^/ form_login: ~ 

所以我实现了我的security.yml文件,如下所示:

security:
    providers:
        in_memory:
            memory:
                users:
                    ryan:
                        password: pass1
                        roles: ROLE_USER
                    admin:
                        password: pass2
                        roles: ROLE_ADMIN

    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

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

        login_firewall:
            anonymous: ~
            pattern: ^/login$
            context: foo

        main:
            pattern: ^/

            form_login:
                login_path: /login
                check_path: /login
                default_target_path: /secret

            logout:
                path: /logout
                target: homepage

            context: foo

    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/secret, roles: ROLE_ADMIN }

问题是,每当我尝试登录时,我都将重定向到登录页面,而我从未获得过身份验证。 我还尝试在两个防火墙之间共享上下文(即它们使用相同的context ),但是没有任何积极效果。

此配置有什么问题?

编辑:

这是我的login.html.twig模板:

<html>
    <body>
        {% if error %}
            <div>{{ error.messageKey | trans(error.messageData, 'security') }}</div>
        {% endif %}

        <form action="{{ path('login') }}" method="post">
            <label for="username">Username:</label>
            <input type="text" id="username" name="_username" value="{{ last_username }}" />

            <label for="password">Password:</label>
            <input type="password" id="password" name="_password" />

            <button type="submit" >Login</button>
        </form>
    </body>
</html>

我不知道为什么(如果有人做,欢迎他们加入另一个答案),但如果我放在form_login元素内外 login_firewall和内main ,那么它可以让用户进行身份验证。

换句话说,工作的security.xml配置为:

编辑main -> form_login也可以为null

security:
    providers:
        in_memory:
            memory:
                users:
                    ryan:
                        password: pass1
                        roles: ROLE_USER
                    admin:
                        password: pass2
                        roles: ROLE_ADMIN

    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

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

        login_firewall:
            anonymous: ~
            pattern: ^/(login|logout)?$
            context: foo

            form_login:
                login_path: /login
                check_path: /login

            logout:
                path: /logout
                target: homepage

        main:
            pattern: ^/
            form_login: ~
            context: foo

    access_control:
        - { path: /(login|logout)?$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: /secret, roles: ROLE_ADMIN }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM