2012-08-27 17 views
5

mam prosta strona logowania i bezpieczeństwo skonfigurować tak:Pliki zasobów w symfony znajdują się za firewallem?

firewalls: 
    main: 
     pattern: ^/ 
     form_login: 
      provider: fos_userbundle 
      csrf_provider: form.csrf_provider 
      use_referer: true 
      always_use_default_target_path: true 
      default_target_path:/
     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: ^/, role: ROLE_ADMIN } 

A w moim pliku base.html.twig mam

{% stylesheets '@BrStgCcBundle/Resources/public/css/bootstrap.css' %} 
    <link rel="stylesheet" href="{{ asset_url }}" /> 
{% endstylesheets %} 

oraz objęcie plik działa tylko wtedy, gdy jestem upoważniony w aplikacji. Tak więc po zalogowaniu system znajduje ten zasób, ale przedtem go nie ma, a kiedy podążam za wygenerowanym linkiem według aktywów, przekierowuję mnie na stronę logowania.

Biorąc link wygląda następująco:

<link rel="stylesheet" href="/app_dev.php/css/026adfc_bootstrap_1.css" /> 

Ten plik existin na twardym, a po nazwie po zalogowaniu pokazuje prawidłowe CSS, gdy nie jest zalogowany przekierowuje mnie do strony logowania.

Odpowiedz

5

Jest to normalne. Mówisz, że wszystko pod katalogiem głównym (wzór:^/) znajduje się za główną zaporą sieciową, a aby uzyskać dostęp do tych plików, musisz być administratorem (ścieżka:^/, rola: ROLE_ADMIN). Więc trzeba ustawić kolejną regułę i powiedzieć, że katalog css można uzyskać anonimowo:

- { path: ^/css, role: IS_AUTHENTICATED_ANONYMOUSLY } 
+0

założę to jest rozwiązanie . –

+1

To jest kiepskie rozwiązanie. Użyj zapory 'dev' zaproponowanej w innej odpowiedzi. –

+0

To jest złe, prawdziwe rozwiązanie problemu jest jak w odpowiedzi Bartosza Rychlickiego – loostro

17

Również odkryłem, że to pomaga, jeśli dodany do security.yml:

firewalls: 
    dev: 
     pattern: ^/(_profiler|_wdt|css|js|assets) 
     security: false 
+0

Nie powinieneś był usunąć go z 'security.yml' w pierwszej kolejności. : P –

+1

Uwaga: sekcja deweloperska pod firewallami musi znajdować się przed główną sekcją lub cokolwiek nazwiesz sekcję dla bezpieczeństwa – Populus