2012-08-23 105 views

回答

13

我必须设置always_use_default_target_pathtrue,如图 symfony documentation

#app/config/security.yml 

firewalls: 
    main: 
     pattern: ^/ 
     form_login: 
      login_path: /login 
      default_target_path: /my/desired/path 
      always_use_default_target_path: true 
6

我有同样的问题,我是有这个问题的原因是因为Symfony的尝试加载的网页调试工具(因此错误中的“_wdt”位),它有自己的路径,在页面加载结束时被调用。就我而言,我已经配置了我的security.yml像这样:

应用程序/配置/ security.yml

security: 
    encoders: 
     FOS\UserBundle\Model\UserInterface: sha512 

    role_hierarchy: 
     ROLE_ADMIN:  ROLE_USER 
     ROLE_SUPER_ADMIN: ROLE_ADMIN 

    providers: 
     fos_userbundle: 
      id: fos_user.user_provider.username 

    firewalls: 
     main: 
      pattern: ^/ 
      form_login: 
       provider: fos_userbundle 
       csrf_provider: form.csrf_provider 
      logout:  true 
      anonymous: true 

    access_control: 
     - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/css, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/js, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/, role: ROLE_USER } 

这意味着,如果用户试图打开一个页面根后面什么“ /”,他必须先登录

我解决了这一问题的方法是通过添加‘_wdt’的一部分,并允许它为匿名用户:

access_control: 
     - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/css, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/js, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/_wdt, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/, role: ROLE_USER } 
+0

谢谢!这是解决真正的问题。不幸的是,选择的答案只是“覆盖”了问题的出现。 –

0

这可能是一个老问题,但而不是o f改变access_control当前Symfony2配置为调试工具栏提供了额外的防火墙:

# Disabling the security for the web debug toolbar, the profiler and Assetic. 
    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 
相关问题