Laboratorium 8 – Blog: logowanie użytkowników
Transkrypt
Laboratorium 8 – Blog: logowanie użytkowników
Technologie programowania systemów internetowych Laboratorium 8 Laboratorium 8 – Blog: logowanie użytkowników Obsługa logowania Formularz logowania 1. Stwórz nowy plik Login.php w katalogu forms. Umieść w nim klasę formularza Blog_Form_Login: <?php class Blog_Form_Login extends Zend_Form { public function init() { $this->setMethod('post'); $user = $this->createElement('text', 'user'); $user->setLabel('Nazwa użytkownika:'); $user->setRequired(true); $this->addElement($user); $pass = $this->createElement('password', 'pass'); $pass->setLabel('Hasło:'); $pass->setRequired(true); $this->addElement($pass); $this->addElement('submit', 'Zaloguj'); } } Kontroler obsługujący logowanie 1. Do obsługi logowania stworzymy nowy kontroler o nazwie Uzytkownicy. Dodamy do niego dwie akcje: login oraz logout. Z linii poleceń wydaj kolejno komendy: zf create controller Uzytkownicy zf create action login Uzytkownicy zf create action logout Uzytkownicy 2. W akcji login stworzymy instancję formularza Blog_Form_Login oraz przekażemy ją do widoku: $form = new Blog_Form_Login(); $url = $this->getRequest()->getBaseUrl(); $form->setAction($url . '/uzytkownicy/login'); $this->view->form = $form; Strona 1 z 4 Technologie programowania systemów internetowych Laboratorium 8 3. Otwórz widok odpowiadający akcji login kontrolera Uzytkownicy (plik view/scripts/uzytkownicy/login.phtml) i umieść w nim kod wyświetlający formularz: <h2>Logowanie</h2> <?php echo $this->form; ?> Dodanie odnośnika na stronie głównej 1. Otwórz plik szablonu (layouts/scripts/layout.phtml). 2. Znajdź fragment wyświetlający odnośnik: <a href="">Zaloguj</a> i uzupełnij w nim adres docelowy: <?php $url = $this->baseUrl() . "/uzytkownicy/login"; ?> <a href="<?php echo $url; ?>">Zaloguj</a> 3. Sprawdź działanie – po kliknięciu na stronie głównej Zaloguj powinien pojawić się formularz logowania. Logowanie użytkownika za pomocą Zend_Auth Do logowania wykorzystamy klasę Zend_Auth, udostępniającą kilka metod autoryzacji. Zastosujemy adapter Zend_Auth_Adapter_DbTable, który poprawność logowania sprawdza porównując podany login i hasło z zapisanymi w tabeli bazy danych. Uzupełnimy metodę loginAction() – schemat działania powinien być następujący: • przygotuj formularz logowania; • sprawdź, czy przesłano kompletne dane z formularza; jeśli tak, to: o stwórz instancję adaptera Zend_Auth_Adapter_DbTable, przekaż mu informacje o tabeli w bazie danych przechowującej dane użytkowników; o wywołaj metodę authenticate() w celu sprawdzenia poprawności logowania; o jeśli logowanie się udało, zapisz informacje o zalogowanym użytkowniku w Zend_Auth i przekieruj przeglądarkę na stronę główną; o jeśli logowanie się nie udało, przekaż do widoku stosowny komunikat. 1. Poniższy kod realizuje loginAction(): opisane wyżej zadania. Umieść go na końcu metody if($this->getRequest()->isPost() && $form->isValid($_POST)) { $dane = $form->getValues(); $db = Zend_Db_Table::getDefaultAdapter(); $authAdapter = new Zend_Auth_Adapter_DbTable( Strona 2 z 4 Technologie programowania systemów internetowych $db, 'CMPH@uzytkownicy' $authAdapter->setIdentity($dane['user']); $authAdapter->setCredential($dane['pass']); Laboratorium 8 , 'nazwa', 'haslo'); $result = $authAdapter->authenticate(); if($result->isValid()) { $daneUzytkownika = $authAdapter->getResultRowObject(); Zend_Auth::getInstance()->getStorage()->write($daneUzytkownika); $this->_helper->redirector('index', 'index'); } else { $this->view->komunikat = 'Logowanie nieudane'; } } 2. Do widoku login.phtml dodaj wyświetlanie komunikatu: if(isset($this->komunikat)) { echo '<div class="login-msg">' . $this->komunikat . '</div>'; } Wylogowanie użytkownika Wylogowanie sprowadza się do wywołania metody clearIdentity() z Zend_Auth. W metodzie logoutAction() umieść następujący kod: Zend_Auth::getInstance()->clearIdentity(); $this->_helper->redirector('index', 'index'); Modyfikacja odnośników na stronie głównej Odnośniki na stronie głównej powinny różnić się w zależności od tego, czy użytkownik jest zalogowany, czy też nie. • Dla niezalogowanego użytkownika: Więcej, Strona główna, Zaloguj. • Po zalogowaniu dodatkowo: Edytuj, Usuń, Dodaj wpis, a także Wyloguj zamiast Zaloguj. W dowolnym miejscu kodu możemy sprawdzić, czy użytkownik jest zalogowany, wywołując metodę hasIdentity() z Zend_Auth: $zalogowany = Zend_Auth::getInstance()->hasIdentity(); Zmienna $zalogowany przyjmie wartość true lub false. 1. Zmienimy odnośnik do strony logowania, tak by po zalogowaniu wyświetlać link Wyloguj, a po wylogowaniu – Zaloguj. Otwórz plik szablonu layout.phtml. 2. Znajdź kod wyświetlający odnośnik do logowania: <?php $url = $this->baseUrl() . "/uzytkownicy/login"; ?> <a href="<?php echo $url; ?>">Zaloguj</a> Strona 3 z 4 Technologie programowania systemów internetowych Laboratorium 8 i dodaj przed nim sprawdzenie, czy użytkownik jest zalogowany. Kompletny kod wyświetlający linki Zaloguj i Wyloguj powinien wyglądać następująco: $zalogowany = Zend_Auth::getInstance()->hasIdentity(); if($zalogowany) { ... echo '<a href="...">Wyloguj</a>'; } else { ... echo '<a href="...">Zaloguj</a>'; } 3. Sprawdź działanie logowania. Zadanie 1. Zmień szablon tak, by link Dodaj wpis był widoczny tylko po zalogowaniu. 2. Dodaj w pliku widoku index.phtml sprawdzenie czy użytkownik jest zalogowany. Bez logowania powinien być widoczny tylko link Więcej, a linki Edytuj i Usuń dopiero po zalogowaniu. Strona 4 z 4