Symfony2 jms / i18n-routing-bundle和security

时间:2014-11-12 09:15:16

标签: symfony-2.3

我正在尝试做什么:

    除了默认语言环境之外,
  1. 区域设置在网址中
  2. 除登录页面外,整个页面都受到保护
  3. i18n-routing-bundle

    jms_i18n_routing:
      default_locale: %locale%
      locales: %locales%
      #strategy: prefix
      strategy: prefix_except_default
    

    路线

    arsf_base_default:
      pattern:  /
      defaults: { _controller: ArsfBaseBundle:Default:index }
    arsf_base_homepage:
      pattern:  /monit/bysector
      defaults: { _controller: ArsfMonitBundle:BySector:index }
    arsf_base_login:
      pattern:  /login
      defaults: { _controller: ArsfBaseBundle:Default:login }
    arsf_base_login_check:
      pattern:  /login_check
    arsf_base_logout:
      pattern:  /logout
      defaults: { _controller: ArsfBaseBundle:Default:logout }
    

    我尝试将security.yml配置为

        login:
            pattern:  ^/|[a-z]+/login$
            security: false
            anonymous:  true
    
        secured_area:
            pattern:    ^.*$
            form_login:
                check_path: arsf_base_login_check
                login_path: arsf_base_login
                default_target_path: arsf_base_homepage
            logout:
                path:   arsf_base_logout
                target: arsf_base_login
    
    access_control:
        - 
          path: ^/|[a-z]+/login$ 
          roles: IS_AUTHENTICATED_ANONYMOUSLY
        -
          path: ^.*$
          roles: ROLE_USER
    

    在这种情况下,我收到错误

    Unable to find the controller for path "/login_check"
    

    所以我尝试删除登录防火墙并使用匿名配置secured_area:〜

    在这种情况下,所有页面都是可访问的,无需身份验证,而且我找不到比在布局中进行测试更好的解决方案:

    <html>
    <head>...</head>
    <body>
        {% if app.user %}
            ...
        {% else %}
            <script>window.location.replace("{{ path('arsf_base_login') }}");</script>
        {% endif %}
    </body>
    </html>
    

    有更好的方法吗? 我的安全问题出了什么问题?

0 个答案:

没有答案