Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [symfony] security
Forum PHP.pl > Forum > PHP > Frameworki
misiaczekmarek
witam,

chciałbym aby moja aplikacja automatycznie przechodziła na tryb komunikacji https niezależnie od tego co wpisał użytkownik w pasku adresu.

pracuję z sf_sandbox, winxp, wamp. aplikacja nazywa sie bardzo oryginalnie: frontend.
posiłkowałem się dokumentacją "The Book.." i "Mój pierwszy projekt".

zmieniłem następujące pliki:

E:\wamp\www\sf_sandbox\apps\frontend\config\settings.yml

  1. prod:
  2.  .settings:
  3.    no_script_name:           off
  4.  
  5. dev:
  6.  .settings:
  7.    # E_ALL | E_STRICT = 4095
  8.    error_reporting:        4095
  9.    web_debug:              on
  10.    cache:                  off
  11.    no_script_name:         off
  12.    etag:                   off
  13. ...
  14. ...
  15. ...
  16.  
  17. all:
  18.    use_security:           on



E:\wamp\www\sf_sandbox\apps\frontend\config\app.yml

  1. default values
  2. all:
  3. enable_SecureFilter: on
  4.  
  5. .....


E:\wamp\www\sf_sandbox\apps\frontend\config\filters.yml

  1. rendering: ~
  2. web_debug: ~
  3. security:
  4. enabled: on
  5. class: sfSecureFilter
  6.  type: security
  7.   condition:   %APP_ENABLE_SECUREFILTER%
  8.  
  9. # generally, you will want to insert your own filters here
  10.  
  11. cache:     ~
  12. common:    ~
  13. flash:     ~
  14. execution: ~


i dodałem plik: E:\wamp\www\sf_sandbox\apps\frontend\lib\sfSecureFilter.class.php

  1. <?php
  2. class sfSecureFilter extends sfFilter
  3. {
  4. public function execute($filterChain)
  5. {
  6. $context = $this->getContext();
  7. $request = $context->getRequest();
  8.  
  9. if (!$request->isSecure())
  10. {
  11. $secure_url = str_replace('http', 'https', $request->getUri());
  12.  
  13. return $context->getController()->redirect($secure_url);
  14. // We don't continue the filter chain
  15. }
  16. else
  17. {
  18. // The request is already secure, so we can continue
  19. $filterChain->execute();
  20. }
  21. }
  22. }
  23. ?>


wydawało mi się, że to wszystko ale niestety nie działa.
wyczyściłem cache. tryb dev nie zgłasza błędów.

jakieś sugestie co do dalszego postępowania?

pozdrawiam
Diwi
Masz w kodzie
  1. <?php
  2. $request->getUri()
  3. ?>


A nie powinno być
  1. <?php
  2. $request->getUrl()
  3. ?>
misiaczekmarek
@ diwi

jak na moją wiedzę to nie ma GetURL jest tylko GetURI ( i pewnie od identifier ) a ponieważ mogę się mylić sprawdziłem co się stanie jeśli wprowadzę taką poprawkę. nie stało się nic, a zgodnie z moją teorią, że nie ma getURL (getUrl) powinien pojawić się błąd.
Wnioski:
a) gdzieś dalej jest coś nie włączone i procedura sfSecureFilter nie jest wykonywana,
cool.gif jednak jest getURL ale coś dalej jest nie tak bo nie działa zamiana http na https

sad.gif
SongoQ
Wedlug mnie to powinno byc troszeczke inaczej

plik filters.yml

  1. <?php
  2. twojanazwaFilter:
  3. class: twojanazwaFilter
  4. ?>


gdzie w libie masz twojanazwaFilter.class.php

wiecej juz nigdzie nic nie definiujesz i przezuc ten filter na sama gore
misiaczekmarek
@SongoQ

teraz się porobiło:

Fatal error: Class 'sfSecureFilter' not found in /cache/frontend/dev/config/modules_main_config_filters.yml.php on line 6" title="Zobacz w manualu PHP" target="_manual

plik E:\wamp\www\sf_sandbox\apps\frontend\config\filters.yml

ma teraz postać (chyba zgodną z twoją sugestią):

  1. sfSecureFilter:
  2. class: sfSecureFilter
  3. rendering: ~
  4. web_debug: ~
  5. security:
  6. enabled: on
  7. ...


to by oznaczało, że clasa jest prztwarzana ale nie w tym miejscu chyba?

przeniosłem treść klasy do innego pliku myUser.class.php i umieściłem go w filters.yml, który wygląda teraz tak:

  1. myUser:
  2. class: myUser
  3. rendering: ~
  4. web_debug: ~
  5. security:
  6. enabled: on
  7.  
  8. ...



a plik myUser.class.php tak:

  1. <?php
  2.  
  3. class myUser extends sfBasicSecurityUser
  4. {
  5.  public function execute($filterChain)
  6.  {
  7.    $context = $this->getContext();
  8.    $request = $context->getRequest();
  9.  
  10.    if (!$request->isSecure())
  11.    {
  12.      $secure_url = str_replace('http', 'https', $request->getUri());
  13.  
  14.      return $context->getController()->redirect($secure_url);
  15.      // We don't continue the filter chain
  16.    }
  17.    else
  18.    {
  19.      // The request is already secure, so we can continue
  20.      $filterChain->execute();
  21.    }
  22.  }
  23. }


jak widać zmiana jest tu: extends sfBasicSecurityUser

i na pierwszy rzut oka działa poprawnie. sprawdzę jeszcze jak się będzie zachowywać po wyłączeniu tego co porobiłem na on i dam znać.

narazie dziękuję wszystkim za pomoc.



wygląda na to, że wszystko działa ok.

plik filter.yml ma postać:

  1. myUser:
  2. class: myUser
  3. rendering: ~
  4. web_debug: ~
  5. security: ~
  6. ...


w pliku settings.yml zahaszowałem

#use security on

i na koniec w pliku app.yml usunąłe wstawioną zmienną enable_SecureFilter: on

jeszcze raz dziękuję.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.