Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZendFramework] uwierzytelnianie z dodatkowym parametrem, Zend_auth
czachor
post 28.04.2009, 22:05:01
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. ?>


--------------------
how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
gazelek
post 22.05.2009, 22:29:46
Post #2





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

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


Pozwole sobie jeszcze poprosic o pomoc... ustawilem sobie juz wszystko (Zend_Registry, reguly do Zend_Acl, sesje), napisalem plugin (kod macie ponizej). Problem polega na tym, ze wszystkie parametry zmiennej $request (konkretnie te, ktore mnie interesuja: module, controller i action) maja wartosc NULL. Niezaleznie od tego, czy uzyje zmiennej z linijki 16 czy z 17... wlasciwie juz wszystko by mi mialo dzialac, poza tym zakichanym $request...
Dodam, ze var_dump($request) wykonany w ktorymkolwiek kontrollerze zwraca poprawny wynik...

Obiekt typu Jpg_Acl tworzony jest w pliku Initializer.php, wtedy tez przekazywany jest do niego $request, wiec moze wtedy nie ma tam przypisanych jeszcze modułu, kontrollera i akcji... Jak w takim razie to rozwiazac? Bo troche mi sie pomysly skonczyly, a jestem juz dosc blisko celu tongue.gif

Kod
<?php
    
    class Jpg_Acl extends Zend_Controller_Plugin_Abstract{
        
        protected $_acl;
        
        protected $_role;

        public function __construct($request,$acl,$rola='guest'){
            $this->_acl = $acl;
            $this->_role = $rola;
            $this->check($request);
        }
        
        public function check(Zend_Controller_Request_Abstract $request){
            var_dump($this->getRequest());
            //var_dump($request); zwraca taki sam wynik jak wyzej....
            $resourceName = $this->_request->getModuleName();
            if (!$this->_acl->isAllowed($this->_role, $resourceName, $request->getActionName())) {
                //$this->denyAccess($request);
            }
        }
        
        private function denyAccess(Zend_Controller_Request_Abstract $request){
            echo '<script language="javascript">location.replace("'.$request->getBaseUrl().'");</script>';
        }
    }
?>


Ten post edytował gazelek 22.05.2009, 22:31:36
Go to the top of the page
+Quote Post

Posty w temacie


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: 27.06.2025 - 04:56