Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZendFramework] uwierzytelnianie z dodatkowym parametrem, Zend_auth
czachor
post
Post #1





Grupa: Zarejestrowani
Postów: 897
Pomógł: 40
Dołączył: 16.12.2003
Skąd: Warszawa

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


Witam,

kombinuję dzisiaj z Zend_Auth i coś mi nie idzie... Chciałbym, żeby oprócz standardowego sprawdzania nazwy i hasła w bazie spełniony był również warunek 'active = TRUE'.
Mam kod z manuala, ale nie działa, logują się nieaktywowani użytkownicy...

Niżej mój kod. Wszystko jest ok, tylko zupełnie ignorowany jest warunek... Będę wdzięczny za pomoc.
  1. <?php
  2. class LoginController extends Main_Controller_Action
  3. {
  4.    function indexAction()
  5.    {
  6.        if ($this->_request->isPost())
  7.        {
  8.            $f = new Zend_Filter_HtmlEntities(ENT_QUOTES);
  9.            $username = $f->filter($this->_request->getPost('user'));
  10.            $password = sha1($f->filter($this->_request->getPost('upasid')));
  11.  
  12.            if (empty($username))
  13.            {
  14.                $this->view->message = 'Nie podano nazwy użytkownika.';
  15.            }
  16.            else
  17.            {
  18.                $db = Zend_Registry::get('db');
  19.                $authAdapter = new Zend_Auth_Adapter_DbTable($db,
  20.                    'users',
  21.                    'name',
  22.                    'password',
  23.                    ' AND active = TRUE');
  24.  
  25.                //$authAdapter->setTableName('users');
  26.                //$authAdapter->setIdentityColumn('name');
  27.                //$authAdapter->setCredentialColumn('password');
  28.                $authAdapter->setIdentity($username);
  29.                $authAdapter->setCredential($password);
  30.  
  31.                $auth = Zend_Auth::getInstance();
  32.                $result = $auth->authenticate($authAdapter);
  33.  
  34.                switch ($result->getCode())
  35.                {
  36.                    case Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND:
  37.                        //nieistniejący użytkownik
  38.                        $this->view->message = 'Użytkownik o podanym loginie nie istnieje.';
  39.                    break;
  40.  
  41.                    case Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID:
  42.                        //niepoprawne hasło
  43.                        $this->view->message = 'Nieprawidłowe hasło.';
  44.                    break;
  45.  
  46.                    case Zend_Auth_Result::SUCCESS:
  47.                        //sukces
  48.                        if ($result->isValid())
  49.                        {
  50.                            $data = $authAdapter->getResultRowObject(null, 'password');
  51.                            $auth->getStorage()->write($data);
  52.                            $this->_redirect('somewhere');
  53.                        };
  54.                    break;
  55.  
  56.                    default:
  57.                        //to do
  58.                    break;
  59.                };
  60.            };
  61.        };
  62.    }
  63. }
  64. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
batman
post
Post #2





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Cytat(gazelek @ 29.04.2009, 13:09:54 ) *
Chcialem zrobic dwa logowania w obrebie jednej strony (jedno dla uzytkownika, drugie dla administratora).

Logowanie robisz jedno. Musisz odpowiednio nadać prawa dostępu. Poczytaj o Zend_Acl.

~czachor
O ile się nie myle to w pg w kolumnach typu bool jest t i f zapisane. Z tego właśnie powodu wszystkie wartości true/false zapisuję jako smallint/tinyint. O wiele łatwiej przesiąść się na inną bazę danych.
Jeśli nie podasz znaku zapytania, zostanie on dopisany automatycznie.
Go to the top of the page
+Quote Post
gazelek
post
Post #3





Grupa: Zarejestrowani
Postów: 85
Pomógł: 3
Dołączył: 28.02.2008

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


Cytat(batman @ 29.04.2009, 14:14:47 ) *
Logowanie robisz jedno. Musisz odpowiednio nadać prawa dostępu. Poczytaj o Zend_Acl.


Jakos nie bylo czasu sie tym zajac, az do dzisiaj. Przeczytalem sekcje manuala dotyczaca Zend_Acl. Pogooglowalem troche, ale ciagle nie moge znalezc zwiazku miedzy Zend_Auth (za pomoca ktorego przeprowadzam logowanie) a wlasnie Zend_Acl. Na chlopski rozum - po zalogowaniu trzeba w jakis sposob ustawic rolę uzytkownika, ktory sie wlasnie zalogowal. Dobrze mysle? Bo skoro mam zdefiniowane:

Kod
$this->addRole(new Zend_Acl_Role('domyslna'));
$this->addRole(new Zend_Acl_Role('uzytkownik'),'domyslna');
$this->addRole(new Zend_Acl_Role('admin'), 'uzytkownik');

//ciach ciach, ponizej ustawienia resursow dla powyzszych rol


to w jaki sposob po logowaniu ustawic, jaka role pelni ten ktos, kto sie zalogowal?
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: 12.10.2025 - 18:08