【问题标题】:More than one firewall at Symfony2 project security.yml, how to deal with pattern?Symfony2项目security.yml的防火墙不止一个,如何处理pattern?
【发布时间】:2015-05-02 00:19:39
【问题描述】:

我在一个需要两个防火墙或安全区域的项目中工作。第一个防火墙/安全区域将允许使用HWIOAuthBundle 使用 Salesforce 作为提供商登录/注销,第二个防火墙/安全区域将允许通过FOSUserBundle 登录/注销,因为这是用于内部系统管理员等。由于我不知道如何处理pattern 参数,我对尝试设置security.yml 文件有疑问。我已阅读Security reference,但不知道如何执行此操作。这是我目前拥有的:

firewalls:
        #this is the public area accessed by/from iOs app and only users registered at Salesforce as rep can login
        rep_area:
            methods: [GET, POST]
            pattern: ^/
            anonymous: true
            logout: true

        #this is the secured area accessed through web browser and only internals are allowed to login
        admin_area:
            pattern:    ^/
            anonymous:    ~

在这种情况下我应该如何配置pattern

更新:防火墙不工作

这是防火墙部分在用户回答后的外观:

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

    #this is the secured area accessed through web browser and only internals are allowed to login
    admin_area:
        pattern:    ^/admin
        anonymous:    ~
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
            login_path: /login
            check_path: /login_check
            post_only: true
            always_use_default_target_path: true
            target_path_parameter: _target_path
            use_referer: false
            failure_path: null
            failure_forward: false
        logout:
            path:   fos_user_security_logout
            target: /

    #this is the public area accessed by/from iOs app and only users registered at Salesforce as rep can login
    rep_area:
        methods: [GET, POST]
        pattern: ^/
        anonymous: true
        logout: true

但是如果我尝试http://appdev.local/app_dev.php/admin/ 我得到了这个错误:

BaseNode.php 第 313 行中的 InvalidConfigurationException:无效 路径“security.firewalls.admin_area”的配置:check_path 登录方法“form_login”的“/login_check”与 防火墙模式“^/admin”。

为什么?

编辑 2:如果 FOSUserBundle && HWIOAuth 一起工作呢?

作为附加信息,我从一开始就忘了告诉这一点,我已经并且需要安装 FOSUserBundle && HWIOAuth,我正在努力让两者都能正常工作。在这种情况下,这就是我的routing.yml 的样子:

#HWIOAuthBundle
hwi_oauth_redirect:
    resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
    prefix:   /connect

hwi_oauth_login:
    resource: "@HWIOAuthBundle/Resources/config/routing/login.xml"
    prefix:   /login

salesforce_login:
    pattern: /login/check-salesforce

#PDOne
pd_one:
    resource: "@PDOneBundle/Controller/"
    type:     annotation
    prefix:   /

template:
    resource: "@TemplateBundle/Controller/"
    type:     annotation
    prefix:   /

#FOSUserBundle
fos_user:
    resource: "@FOSUserBundle/Resources/config/routing/all.xml"
fos_user_security:
    prefix: /admin
    resource: "@FOSUserBundle/Resources/config/routing/security.xml"

#SonataAdmin
admin:
    resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.xml'
    prefix: /admin

_sonata_admin:
    resource: .
    type: sonata_admin
    prefix: /admin

我应该如何处理 FOSUserBundle && HWIOAuth 之间的前缀?

【问题讨论】:

    标签: php symfony fosuserbundle hwioauthbundle symfony-2.6


    【解决方案1】:

    只是简单

    firewalls:
        #this is the secured area accessed through web browser and only internals are allowed to login
                admin_area:
                    pattern:    ^/admin
                    anonymous:    ~
    
            #this is the public area accessed by/from iOs app and only users registered at Salesforce as rep can login
            rep_area:
                methods: [GET, POST]
                pattern: ^/
                anonymous: true
                logout: true
    

    这是一个正则表达式,告诉 symfony 所有带有/ 的路由^(开头)都遵循这个规则。或/admin 遵循另一条规则。防火墙将始终遵循它首先匹配的任何规则。所以你的管理规则必须放在第一位,否则它将不起作用。

    编辑

    在您为 FOS UserBundle 添加安全路由的路由设置中,尝试将 /admin 作为前缀附加。可能是因为 /admin 是您的规则,但为登录生成的路由是 host.com/login 而不是 host.com/admin/login

    fos_user_security:
        prefix: /admin
        resource: "@FOSUserBundle/Resources/config/routing/security.xml"
    

    【讨论】:

    • 差不多了,你能再检查一下我的帖子吗?我在尝试一起工作时遇到了一些问题,需要一些帮助,顺便说一句,感谢您花一些时间并尝试提供帮助
    • 这可能是因为您包含了“@FOSUserBundle/Resources/config/routing/all.xml”,其中已经包含了安全部分。因此,如果您仅将所有 UserBundle 用于管理面板,请将前缀:/admin 移动到 fos_user 并一起摆脱 fos_user_security。
    • 谢谢,您可以查看this 的帖子,如果您知道出了什么问题,可以给我一个线索吗?
    • 您是否尝试在 /admin 以外的站点区域使用 FOSUserBundle ?
    • 不,仅适用于 /admin
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    相关资源
    最近更新 更多