【问题标题】:Bypassing authentication on Symfony2 "welcome" page在 Symfony2 “欢迎”页面上绕过身份验证
【发布时间】:2012-03-28 13:57:04
【问题描述】:

我在我的应用上处理身份验证的方式是将 100% 的所有内容置于身份验证之后,然后指定某些例外情况。

这些例外包括登录页面和其他一些页面。一切工作正常,除了一个部分:“默认”页面,或任何你想调用的页面。显然,我不希望人们必须登录才能看到我网站的首页,但我不知道如何使身份验证不需要。

这是我的欢迎页面路线:

_welcome:
    pattern:  /
    defaults: { _controller: VNNPressboxBundle:User:welcome }

这是我的app/config/security.yml

security:
    encoders:
        Symfony\Component\Security\Core\User\User:
            algorithm: sha1
            iterations: 1
            encode_as_base64: false
        VNN\PressboxBundle\Entity\User:
            algorithm: sha1
            iterations: 1
            encode_as_base64: false

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        administrators:
            entity: { class: VNNPressboxBundle:User, property: username }

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

        secured_area:
            pattern:    ^/  
            form_login: ~
            logout: ~
            anonymous: ~
            http_basic:
                realm: "Secured Demo Area"

    access_control:
        - { path: ^/_welcome, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/user/new, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/user/create, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/user/thanks, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/user/agreement, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/user/welcome, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/user/activate, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/signup, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, roles: ROLE_ADMIN }
        - { path: ^/, roles: ROLE_USER }

相关的部分当然是这样的:

access_control:
    - { path: ^/_welcome, roles: IS_AUTHENTICATED_ANONYMOUSLY }

即使我设置了这种方式,当我尝试进入欢迎页面时,我总是会被引导到登录屏幕(我的意思是http://myapp.com/app_dev.php,而不是http://myapp.com/app_dev.php/user/welcome)。我错过了什么?

【问题讨论】:

    标签: security symfony url-routing


    【解决方案1】:

    尝试为默认页面设置一个例外,然后将所有子页面设置为身份验证。除了默认页面之外,这应该将所有内容置于身份验证之后。它也应该适用于您的异常。

    - { path: ^/$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/*, role: IS_AUTHENTICATED_REMEMBERED }
    

    【讨论】:

    • 第一行似乎对我有用。谢谢! (如果我同时使用这两条线,它就不起作用了。)
    猜你喜欢
    • 2010-12-26
    • 2019-03-20
    • 2015-06-26
    • 2013-05-14
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    相关资源
    最近更新 更多