ZF Básico - 6. Autenticação

3,304 views

Published on

Mini-curso sobre Zend Framework - Parte 6

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,304
On SlideShare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
184
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

ZF Básico - 6. Autenticação

  1. 1. Zend Framework Parte VI: Autenticação de Usuário
  2. 2. Autenticação <ul><li>É o processo de ‘logar’ alguém em uma aplicação web. </li></ul><ul><li>Modificaremos nossa aplicação para exigir o login do usuário antes de dar acesso à qualquer parte da aplicação. </li></ul><ul><li>Passos necessários: </li></ul><ul><ul><li>Criar tabela de usuários e povoar pelo menos um usuário; </li></ul></ul><ul><ul><li>Criar um formulário de login (classe); </li></ul></ul><ul><ul><li>Criar um Controller contendo as Actions para login e logout; </li></ul></ul><ul><ul><li>Certificar-se de que o usuário está logado antes de deixar que ele acesse a aplicação. </li></ul></ul>
  3. 3. A Tabela de Usuários <ul><li>Execute os seguintes códigos SQL: </li></ul><ul><li>CREATE TABLE users ( </li></ul><ul><li>id int(11) NOT NULL auto_increment, </li></ul><ul><li>username varchar(50) NOT NULL, </li></ul><ul><li>password varchar(50) NOT NULL, </li></ul><ul><li>realName varchar(100) NOT NULL, </li></ul><ul><li>PRIMARY KEY (id), </li></ul><ul><li>UNIQUE KEY username (username) </li></ul><ul><li>); </li></ul><ul><li>INSERT INTO users </li></ul><ul><li>VALUES </li></ul><ul><li>(null, ‘seuLogin', ‘suaSenha', ‘seuNomeReal'); </li></ul>
  4. 4. Mudanças no Bootstrap <ul><li>Certifique-se de que seu bootstrap contenha: </li></ul><ul><li>/** </li></ul><ul><li>* Setup database </li></ul><ul><li>* </li></ul><ul><li>*/ </li></ul><ul><li>$db = Zend_Db::factory($config->db); </li></ul><ul><li>Zend_Db_Table::setDefaultAdapter($db); </li></ul><ul><li>/** </li></ul><ul><li>* Persiste o objeto db para uso em toda a </li></ul><ul><li>* aplicação </li></ul><ul><li>*/ </li></ul><ul><li>$registry->set('db', $db); </li></ul>
  5. 5. O Controller de Autenticação <ul><li>./application/controllers/AuthController.php </li></ul><ul><li>class AuthController extends Zend_Controller_Action { </li></ul><ul><li>function init() { </li></ul><ul><li>$this->initView(); </li></ul><ul><li>$this->view->baseUrl = $this->_request->getBaseUrl(); </li></ul><ul><li>} </li></ul><ul><li>function indexAction() { </li></ul><ul><li>$this->_redirect('/'); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  6. 6. O Formulário de Login <ul><li>./application/models/LoginForm.php </li></ul><ul><li>class LoginForm extends Zend_Form { </li></ul><ul><li>public function __construct($options = null) { </li></ul><ul><li>parent::__construct($options); </li></ul><ul><li>$this->setName('login'); </li></ul>
  7. 7. O Formulário de Login <ul><li>...continuação </li></ul><ul><li>$username = new Zend_Form_Element_Text('username'); </li></ul><ul><li>$username->setLabel('Usuário') </li></ul><ul><li>->setRequired(true) </li></ul><ul><li>->addFilter('StripTags') </li></ul><ul><li>->addFilter('StringTrim') </li></ul><ul><li>->addValidator('NotEmpty'); </li></ul>
  8. 8. O Formulário de Login <ul><li>...continuação </li></ul><ul><li>$password = new Zend_Form_Element_Password('password'); </li></ul><ul><li>$password->setLabel('Senha') </li></ul><ul><li>->setRequired(true) </li></ul><ul><li>->addFilter('StripTags') </li></ul><ul><li>->addFilter('StringTrim') </li></ul><ul><li>->addValidator('NotEmpty'); </li></ul>
  9. 9. O Formulário de Login <ul><li>...continuação </li></ul><ul><li>$submit = new Zend_Form_Element_Submit('submit'); </li></ul><ul><li>$this->addElements(array($username, $password, $submit)); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  10. 10. A visão do Login <ul><li>./application/views/scripts/auth/login.phtml </li></ul><ul><li><?php if(!empty($this->message)) :?> </li></ul><ul><li><div id=&quot;message&quot;> </li></ul><ul><li><?php echo $this->escape($this->message);?> </li></ul><ul><li></div> </li></ul><ul><li><?php endif; </li></ul><ul><li>echo $this->form; </li></ul><ul><li>?> </li></ul>
  11. 11. O loginAction <ul><li>Edite o seu AuthController.php: </li></ul><ul><li>function loginAction() { </li></ul><ul><li>$form = new LoginForm(); </li></ul><ul><li>$form->submit->setLabel('Login'); </li></ul><ul><li>$form->setAction($this->view->baseUrl . '/auth/login') </li></ul><ul><li>->setMethod('post'); </li></ul><ul><li>$this->view->form = $form; </li></ul><ul><li>$this->view->message = ''; </li></ul>
  12. 12. O loginAction <ul><li>...continuação </li></ul><ul><li>if ($this->_request->isPost()) { </li></ul><ul><li>$formData = $this->_request->getPost(); </li></ul><ul><li>if ($form->isValid($formData)) { </li></ul><ul><li>$username = $form->getValue('username'); </li></ul><ul><li>$password = $form->getValue('password'); </li></ul>
  13. 13. O loginAction <ul><li>...continuação </li></ul><ul><li>$db = Zend_Registry::get('db'); </li></ul><ul><li>$authAdapter = new Zend_Auth_Adapter_DbTable($db); </li></ul><ul><li>$authAdapter->setTableName('users'); </li></ul><ul><li>$authAdapter->setIdentityColumn('username'); </li></ul><ul><li>$authAdapter->setCredentialColumn('password'); </li></ul>
  14. 14. O loginAction <ul><li>...continuação </li></ul><ul><li>$authAdapter->setIdentity($username); </li></ul><ul><li>$authAdapter->setCredential($password); </li></ul><ul><li>$auth = Zend_Auth::getInstance(); </li></ul><ul><li>$result = $auth->authenticate($authAdapter); </li></ul>
  15. 15. O loginAction <ul><li>...continuação </li></ul><ul><li>if ($result->isValid()) { </li></ul><ul><li>$data = $authAdapter->getResultRowObject(null, 'password'); </li></ul><ul><li>$auth->getStorage()->write($data); </li></ul><ul><li>$this->_redirect('/index/list/'); </li></ul><ul><li>} else { </li></ul><ul><li>$this->view->message = 'Falha na autenticação.'; </li></ul><ul><li>} </li></ul>
  16. 16. O loginAction <ul><li>...continuação </li></ul><ul><li>} else { </li></ul><ul><li>$this->view->message = 'Dados de autenticação incorretos.'; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>$this->view->title = &quot;Login&quot;; </li></ul><ul><li>} </li></ul>
  17. 17. O logoutAction <ul><li>Edite seu AuthController.php: </li></ul><ul><li>function logoutAction() { </li></ul><ul><li>Zend_Auth::getInstance()->clearIdentity(); </li></ul><ul><li>$this->_redirect('/auth/login/'); </li></ul><ul><li>} </li></ul>
  18. 18. Alterando o IndexController <ul><li>Incluir: </li></ul><ul><li>function init() { </li></ul><ul><li>$this->initView(); </li></ul><ul><li>$this->view->baseUrl = $this->_request->getBaseUrl(); </li></ul><ul><li>$this->view->user = Zend_Auth::getInstance()->getIdentity(); </li></ul><ul><li>} </li></ul>
  19. 19. Alterando o IndexController <ul><li>Incluir: </li></ul><ul><li>function indexAction() {} </li></ul><ul><li>function listAction() { </li></ul><ul><li>$this->view->title = &quot;Meus Álbuns&quot;; </li></ul><ul><li>$albums = new Albums(); </li></ul><ul><li>$this->view->albums = $albums->fetchAll(); </li></ul><ul><li>} </li></ul>
  20. 20. Criando a visão da listAction <ul><li>Renomeie o script de visão index.phtml para list.phtml. </li></ul>
  21. 21. Alterando o Layout padrão <ul><li>Edite o seu layout.phtml: </li></ul><ul><li><body> </li></ul><ul><li><div id=&quot;login&quot;> </li></ul><ul><li><?php if ($this->user) : ?> </li></ul><ul><li><p id= &quot;loggedin&quot;> Usuário: </li></ul><ul><li><?php echo $this->escape($this->user->realName); ?>. [ </li></ul><ul><li><a href= &quot;<?php echo $this->baseUrl ?>/auth/logout&quot;>Sair</a> ] </li></ul><ul><li></p> </li></ul><ul><li><?php endif; ?> </li></ul><ul><li></div> </li></ul><ul><li><div id=&quot;content&quot;> </li></ul><ul><li><h1><?php echo $this->escape($this->title); ?></h1> </li></ul><ul><li><?php echo $this->layout()->content; ?> </li></ul><ul><li></div> </li></ul><ul><li></body> </li></ul>
  22. 22. Protegendo os Actions <ul><li>Adicione ao seu IndexController.php: </li></ul><ul><li>function preDispatch() { </li></ul><ul><li>$auth = Zend_Auth::getInstance(); </li></ul><ul><li>if (!$auth->hasIdentity()) { </li></ul><ul><li>$this->_redirect('/auth/login/'); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  23. 23. Do it! <ul><li>Escreva o código e rode a aplicação. </li></ul>

×