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