Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> klasa logowanie - gdzie sprawdzac zmienne sesyjne
become
post
Post #1





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 12.01.2007

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


Witam.

Jako ze zaczalem uczyc sie OOP chcialbym sie dowiedziec, gdzie umiescic sprawdzanie czy user jest zalogowany ?
Chodzi o to, ze chce informacje o tym czy jest zalogowany trzymac w sesji. I teraz jak zorganizowac klase logowanie ?
Chcialbym przy kazdym przeladowaniu strony sprawdzic, czy istnijeje zmienna sesyjna np. 'userlogin' i na podstawie jej wartosci zalogowac go. Czy calosc operacji zrobic w klasie, czy np. gdzies w kodzie najpierw sprawdzic czy zmienna sesyjna istnieje i dopiero pozniej ewentualnie utworzyc klase Logowanie(), czy raczej przy kazdym wywolaniu strony tworzyc klase Logowanie a w środku niej sprawdzac czy user jest zalogowany ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
NoiseMc
post
Post #2





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

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


  1. <?php
  2. $auth=new Authorization();
  3. $user=new User($username, $userpass);
  4. $auth->authenticate($user);
  5. ?>


Mi osobiscie tez najbardziej podoba sie takie rozwiazanie, dodatkowo obiekt Authorization moglby uzywac roznych adapterow jak na przyklad DBAuthorizationAdapter lub FileAuthorizationAdapter jezeli chcialbys w przyszlosci zmienic sposob przechowywania danych potrzebnych do autoryzacji.
Korzystajac z Zend Framework mam plugin ktory przed uruchomieniem kazdej akcji sprawdza czy uzytkownik jest zalogowany jezeli nie to go przenosi do strony logowania:

  1. <?php
  2. class AuthenticationPlugin extends Zend_Controller_Plugin_Abstract
  3. {
  4. function preDispatch(Zend_Controller_Request_Abstract $request)
  5. {
  6. $auth = Zend_Auth::getInstance ();
  7.  
  8. if (! $auth->hasIdentity ())
  9. {
  10. // Przekieruj do strony logowania
  11. }
  12. }
  13. }
  14. ?>


A sam proces logowania:

  1. <?php
  2. $user = new Users_User ($userName, $password);
  3. $authAdapter = new Noise_Auth_Adapter_UserNamePassword ($user);
  4. $result = $this->auth->authenticate ($authAdapter);
  5.  
  6. switch ($result->getCode ())
  7. {  
  8. case Zend_Auth_Result::SUCCESS:
  9. // Pokaz strone
  10. break;
  11.  
  12. case Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID:
  13. $errorMessage = 'Inactive User';
  14. break;
  15.  
  16. default:
  17. $errorMessage = 'Invalid UserName or Password';
  18. break;
  19. }
  20. ?>


Natomiast sam adapter:

  1. <?php
  2. class Noise_Auth_Adapter_UserNamePassword implements Zend_Auth_Adapter_Interface
  3. {
  4. private $user;
  5.  
  6. public function __construct ($user)
  7. {
  8. $this->user = $user;
  9. }
  10.  
  11. public function authenticate ()
  12. {
  13. $usersModel = new Users_Model ();
  14.  
  15. $user = $usersModel->getUserByUserNameAndPassword ($this->user->userName, $this->user->password);
  16.  
  17. if (empty ($user))
  18. {
  19. return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND, null);
  20. }
  21. else 
  22. {
  23. if ($user->isActive)
  24. {
  25. return new Zend_Auth_Result (Zend_Auth_Result::SUCCESS, $user->userID);
  26. }
  27. else 
  28. {
  29. return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID, null);
  30. }
  31. }
  32. }
  33. }
  34. ?>


Co do przechowywania zmiennych sesyjnych to ... jak widac w pluginie ( $auth->hasIdentity (); ) zajmuje sie tym objekt Auth i to tam zapisywane i odczytywane sa dane z sesji.

Ten post edytował NoiseMc 29.11.2007, 13:42:31
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 4.10.2025 - 07:52