Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony] in-memory - logowanie
peter13135
post 20.07.2012, 09:31:40
Post #1





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Chcę zrobić logowanie, takie jak w "acme demo", czyli z ustalonymi w konfiguracji adminami.

Niby cały kod mam i wszystko działa... ale jak chcę przenieść to na moje potrzeby, to mi nie wychodzi.

Napiszę co po kolei robiłem :

1. Do swojego kontrolera dodałem 3 metody :
  1.  
  2. /**
  3.   * @Route("valuation/admin/login", name="admin_login")
  4.   * @Template()
  5.   */
  6. public function loginAction()
  7. {
  8. if ($this->get('request')->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
  9. $error = $this->get('request')->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
  10. } else {
  11.  
  12. $error = $this->get('request')->getSession()->get(SecurityContext::AUTHENTICATION_ERROR);
  13. }
  14.  
  15. return array(
  16. 'last_username' => $this->get('request')->getSession()->get(SecurityContext::LAST_USERNAME),
  17. 'error' => $error,
  18. );
  19. }
  20.  
  21. /**
  22.   * @Route("valuation/admin/login_check", name="_security_check")
  23.   */
  24. public function securityCheckAction()
  25. {
  26. // The security layer will intercept this request
  27. }
  28.  
  29. /**
  30.   * @Route("valuation/admin/logout", name="_demo_logout")
  31.   */
  32. public function logoutAction()
  33. {
  34. // The security layer will intercept this request
  35. }

oraz taką linijkę na początek :
  1. use JMS\SecurityExtraBundle\Annotation\Secure;


Są one skopiowane z przykładu Acme

2.Skopiowałem templatke login.html.twig do swojego bundla
3. Nieco zmodyfikowałem plik security.yml
  1. security:
  2. encoders:
  3. Symfony\Component\Security\Core\User\User: plaintext
  4.  
  5. role_hierarchy:
  6. ROLE_ADMIN: ROLE_USER
  7. ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
  8.  
  9. providers:
  10. in_memory:
  11. users:
  12. user: { password: userpass, roles: [ 'ROLE_USER' ] }
  13. admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
  14.  
  15. firewalls:
  16. dev:
  17. pattern: ^/(_(profiler|wdt)|css|images|js)/
  18. security: false
  19.  
  20. login:
  21. pattern: ^valuation/admin/login$
  22. security: false
  23.  
  24. secured_area:
  25. pattern: ^/valuation/admin/
  26. form_login:
  27. check_path: valuation/admin/login_check
  28. login_path: valuation/admin/login
  29. logout:
  30. path: valuation/admin/logout
  31. target: valuation/
  32. #anonymous: ~
  33. #http_basic:
  34. # realm: "Secured Demo Area"
  35.  
  36. access_control:
  37. #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
  38. #- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }



I to by było na tyle.

Wchodzę sobie do
Kod
valuation/admin/login


Formularz się wyświetla. Wpisuje dane, wysyłam i przenosi mnie do
Kod
valuation/admin/login_check

gdzie wyświetla się :
Kod
he controller must return a response (null given). Did you forget to add a return statement somewhere in your controller?
500 Internal Server Error - LogicException


Błąd jest zrozumiały, bo mój kontroler faktycznie nie zwraca wartości... ale podobno jakiś "security layer" ma to "obejść" i mimo to mnie zalogować.


Czy mogę prosić o podpowiedź gdzie znajduje się błąd ?


--------------------
:)
Go to the top of the page
+Quote Post
greycoffey
post 8.08.2012, 22:52:58
Post #2





Grupa: Zarejestrowani
Postów: 320
Pomógł: 29
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----


Może spróbuj zmienić front controller na app_dev.php, aby dowiedzieć się czegoś iwęcej. Na moje oko, metoda securityCheckAction() powinna zwracać jakiś boolean.
Go to the top of the page
+Quote Post
dragon7
post 14.08.2012, 13:13:40
Post #3





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 1.10.2010

Ostrzeżenie: (0%)
-----


Jak dla mnie to twoje loginAction nie zwraca obiektu odpowiedzi, tylko tablicę parametrów. Nie wiem czemu więc wyświetla ci się formularz logowania. Spróbuj zmienić na coś takiego
  1. return $this->render('AcmeSecurityBundle:Security:login.html.twig', array(
  2. 'last_username' => $session->get(SecurityContext::LAST_USERNAME),
  3. 'error' => $error
  4. ));
Go to the top of the page
+Quote Post
destroyerr
post 14.08.2012, 15:09:46
Post #4





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

Ostrzeżenie: (0%)
-----


Cytat
First, be sure that you've defined the /login and /login_check routes correctly and that they correspond to the login_path and check_path config values.

Sprawdziles? Nie mam pewnosci, ale sprawdz czy to nie jest wina braku slasha w login_path i check_path.

@dragon7 przeciez korzysta z adnotacji Template dlatego zwraca tablice.
Go to the top of the page
+Quote Post
peter13135
post 20.08.2012, 09:06:17
Post #5





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


@greycoffey
Pracuję na app_dev.php
Nie sądze, by ta metoda miała zwracać boolean. W examplu jest tak jak jest u mnie (tylko, że w examplu działa, a "moja wersja" nie wink.gif ). Poza tym, takie "może to, może tamto" do mnie nie dociera, jestem noobem w symfony, to pierwszy framework któego się uczę.
@dragon7
Bo jak sobię napiszę nad metodą
Kod
    /**
     * @Template()
     */

To wtedy generowana jest templatka, na podstawie nazwy metody, oraz tablicy zwracanej przez metodę.

@destroyerr

O Co właściwie chodzi ? tongue.gif

Ten kod, któy użyłem do logowania wkleiłem do pierwszego postu.
Są to właściwie 3 metody (któe są skopiowane z exampla acme) oraz plik security.yml (niezo zmodyfikowany). Nie mam pojęcia gdzie jeszcze powininem coś zmieniać.

metody zrobiłem - tak jak w pierwszym poście wkleiłem




edit://

Kurczę, działa. Błąd w pliku security.yml, brakowało slashy na początku wink.gif

Ten post edytował peter13135 20.08.2012, 09:51:05


--------------------
:)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.06.2025 - 11:08