zf básico - 6. autenticação

23
1 Zend Framework Zend Framework Parte VI: Autenticação de Parte VI: Autenticação de Usuário Usuário

Upload: marcos-bezerra

Post on 17-May-2015

3.215 views

Category:

Education


0 download

DESCRIPTION

Mini-curso sobre Zend Framework - Parte 6

TRANSCRIPT

Page 1: ZF Básico - 6. Autenticação

11

Zend FrameworkZend Framework

Parte VI: Autenticação de Parte VI: Autenticação de UsuárioUsuário

Page 2: ZF Básico - 6. Autenticação

22

AutenticaçãoAutenticação É o processo de ‘logar’ alguém em uma É o processo de ‘logar’ alguém em uma

aplicação web.aplicação web. Modificaremos nossa aplicação para exigir Modificaremos nossa aplicação para exigir

o login do usuário antes de dar acesso à o login do usuário antes de dar acesso à qualquer parte da aplicação.qualquer parte da aplicação.

Passos necessários:Passos necessários:– Criar tabela de usuários e povoar pelo menos Criar tabela de usuários e povoar pelo menos

um usuário;um usuário;– Criar um formulário de login (classe);Criar um formulário de login (classe);– Criar um Controller contendo as Actions para Criar um Controller contendo as Actions para

login e logout;login e logout;– Certificar-se de que o usuário está logado Certificar-se de que o usuário está logado

antes de deixar que ele acesse a aplicação.antes de deixar que ele acesse a aplicação.

Page 3: ZF Básico - 6. Autenticação

33

A Tabela de UsuáriosA Tabela de Usuários Execute os seguintes códigos SQL:Execute os seguintes códigos SQL:CREATE TABLE users (id int(11) NOT NULL auto_increment,username varchar(50) NOT NULL,password varchar(50) NOT NULL,realName varchar(100) NOT NULL,PRIMARY KEY (id),UNIQUE KEY username (username));

INSERT INTO usersVALUES (null, ‘seuLogin', ‘suaSenha', ‘seuNomeReal');

Page 4: ZF Básico - 6. Autenticação

44

Mudanças no BootstrapMudanças no Bootstrap Certifique-se de que seu bootstrap contenha:Certifique-se de que seu bootstrap contenha:/**/** * Setup database* Setup database * * */*/$db = Zend_Db::factory($config->db);$db = Zend_Db::factory($config->db);Zend_Db_Table::setDefaultAdapter($db);Zend_Db_Table::setDefaultAdapter($db);

/**/** * Persiste o objeto db para uso em toda a* Persiste o objeto db para uso em toda a * aplicação* aplicação */*/$registry->set('db', $db);$registry->set('db', $db);

Page 5: ZF Básico - 6. Autenticação

55

O Controller de O Controller de AutenticaçãoAutenticação

./application/controllers/AuthController.php./application/controllers/AuthController.php

class AuthController extends Zend_Controller_Action {class AuthController extends Zend_Controller_Action {

function init() {function init() {

$this->initView();$this->initView(); $this->view->baseUrl = $this->_request->getBaseUrl();$this->view->baseUrl = $this->_request->getBaseUrl();

}}

function indexAction() {function indexAction() {

$this->_redirect('/');$this->_redirect('/');

}}}}

Page 6: ZF Básico - 6. Autenticação

66

O Formulário de LoginO Formulário de Login

./application/models/LoginForm.php./application/models/LoginForm.phpclass LoginForm extends Zend_Form {class LoginForm extends Zend_Form {

public function __construct($options = public function __construct($options = null) {null) {

parent::__construct($options);parent::__construct($options);

$this->setName('login');$this->setName('login');

Page 7: ZF Básico - 6. Autenticação

77

O Formulário de LoginO Formulário de Login

...continuação...continuação$username = new $username = new

Zend_Form_Element_Text('username');Zend_Form_Element_Text('username');

$username->setLabel('Usuário')$username->setLabel('Usuário')

->setRequired(true)->setRequired(true)

->addFilter('StripTags')->addFilter('StripTags')

->addFilter('StringTrim')->addFilter('StringTrim')

->addValidator('NotEmpty');->addValidator('NotEmpty');

Page 8: ZF Básico - 6. Autenticação

88

O Formulário de LoginO Formulário de Login

...continuação...continuação$password = new Zend_Form_Element_Password('password');$password = new Zend_Form_Element_Password('password');

$password->setLabel('Senha')$password->setLabel('Senha')

->setRequired(true)->setRequired(true)

->addFilter('StripTags')->addFilter('StripTags')

->addFilter('StringTrim')->addFilter('StringTrim')

->addValidator('NotEmpty');->addValidator('NotEmpty');

Page 9: ZF Básico - 6. Autenticação

99

O Formulário de LoginO Formulário de Login

...continuação...continuação$submit = new $submit = new

Zend_Form_Element_Submit('submit');Zend_Form_Element_Submit('submit');

$this->addElements(array($username, $password, $this->addElements(array($username, $password, $submit));$submit));

}}

}}

Page 10: ZF Básico - 6. Autenticação

1010

A visão do LoginA visão do Login ./application/views/scripts/auth/login.phtml./application/views/scripts/auth/login.phtml

<?php if(!empty($this->message)) :?><?php if(!empty($this->message)) :?> <div id="message"><div id="message"> <?php echo $this->escape($this->message);?<?php echo $this->escape($this->message);?

>> </div></div><?php endif; <?php endif;

echo $this->form;echo $this->form;

?>?>

Page 11: ZF Básico - 6. Autenticação

1111

O loginActionO loginAction Edite o seu AuthController.php:Edite o seu AuthController.php:function loginAction() {function loginAction() {

$form = new LoginForm();$form = new LoginForm(); $form->submit->setLabel('Login');$form->submit->setLabel('Login'); $form->setAction($this->view->baseUrl . $form->setAction($this->view->baseUrl .

'/auth/login')'/auth/login') ->setMethod('post');->setMethod('post'); $this->view->form = $form;$this->view->form = $form; $this->view->message = '';$this->view->message = '';

Page 12: ZF Básico - 6. Autenticação

1212

O loginActionO loginAction ...continuação...continuaçãoif ($this->_request->isPost()) {if ($this->_request->isPost()) {

$formData = $this->_request->getPost();$formData = $this->_request->getPost();

if ($form->isValid($formData)) {if ($form->isValid($formData)) {

$username = $form-$username = $form->getValue('username');>getValue('username');

$password = $form-$password = $form->getValue('password');>getValue('password');

Page 13: ZF Básico - 6. Autenticação

1313

O loginActionO loginAction

...continuação...continuação

$db = Zend_Registry::get('db');$db = Zend_Registry::get('db');

$authAdapter = new $authAdapter = new Zend_Auth_Adapter_DbTable($db);Zend_Auth_Adapter_DbTable($db);

$authAdapter->setTableName('users');$authAdapter->setTableName('users');

$authAdapter-$authAdapter->setIdentityColumn('username');>setIdentityColumn('username');

$authAdapter-$authAdapter->setCredentialColumn('password');>setCredentialColumn('password');

Page 14: ZF Básico - 6. Autenticação

1414

O loginActionO loginAction

...continuação...continuação$authAdapter->setIdentity($username);$authAdapter->setIdentity($username);

$authAdapter->setCredential($password);$authAdapter->setCredential($password);

$auth = Zend_Auth::getInstance();$auth = Zend_Auth::getInstance();

$result = $auth-$result = $auth->authenticate($authAdapter);>authenticate($authAdapter);

Page 15: ZF Básico - 6. Autenticação

1515

O loginActionO loginAction ...continuação...continuaçãoif ($result->isValid()) {if ($result->isValid()) { $data = $authAdapter->getResultRowObject(null, $data = $authAdapter->getResultRowObject(null,

'password');'password'); $auth->getStorage()->write($data);$auth->getStorage()->write($data); $this->_redirect('/index/list/');$this->_redirect('/index/list/'); } else {} else { $this->view->message = 'Falha na autenticação.';$this->view->message = 'Falha na autenticação.'; }}

Page 16: ZF Básico - 6. Autenticação

1616

O loginActionO loginAction ...continuação...continuação} else {} else {

$this->view->message = 'Dados de autenticação $this->view->message = 'Dados de autenticação incorretos.';incorretos.';

}}

}}

$this->view->title = "Login";$this->view->title = "Login";

}}

Page 17: ZF Básico - 6. Autenticação

1717

O logoutActionO logoutAction

Edite seu AuthController.php:Edite seu AuthController.php:function logoutAction() {function logoutAction() {

Zend_Auth::getInstance()-Zend_Auth::getInstance()->clearIdentity();>clearIdentity();

$this->_redirect('/auth/login/');$this->_redirect('/auth/login/');

}}

Page 18: ZF Básico - 6. Autenticação

1818

Alterando o IndexControllerAlterando o IndexController

Incluir:Incluir:function init() {function init() {

$this->initView();$this->initView();

$this->view->baseUrl = $this->_request->getBaseUrl();$this->view->baseUrl = $this->_request->getBaseUrl();

$this->view->user = Zend_Auth::getInstance()-$this->view->user = Zend_Auth::getInstance()->getIdentity();>getIdentity();

}}

Page 19: ZF Básico - 6. Autenticação

1919

Alterando o IndexControllerAlterando o IndexController Incluir:Incluir:function indexAction() {}function indexAction() {}

function listAction() {function listAction() {

$this->view->title = "Meus Álbuns";$this->view->title = "Meus Álbuns"; $albums = new Albums();$albums = new Albums(); $this->view->albums = $albums-$this->view->albums = $albums-

>fetchAll();>fetchAll();

}}

Page 20: ZF Básico - 6. Autenticação

2020

Criando a visão da listActionCriando a visão da listAction

Renomeie o script de visão Renomeie o script de visão index.phtml para list.phtml.index.phtml para list.phtml.

Page 21: ZF Básico - 6. Autenticação

2121

Alterando o Layout padrãoAlterando o Layout padrão Edite o seu layout.phtml:Edite o seu layout.phtml:<body><body> <div id="login"><div id="login"> <?php if ($this->user) : ?><?php if ($this->user) : ?> <p id= "loggedin"> Usuário: <p id= "loggedin"> Usuário: <?php echo $this->escape($this->user->realName); ?>. [ <?php echo $this->escape($this->user->realName); ?>. [ <a href= "<?php echo $this->baseUrl <a href= "<?php echo $this->baseUrl

?>/auth/logout">Sair</a> ]?>/auth/logout">Sair</a> ] </p></p> <?php endif; ?><?php endif; ?> </div></div> <div id="content"><div id="content"> <h1><?php echo $this->escape($this->title); ?></h1><h1><?php echo $this->escape($this->title); ?></h1> <?php echo $this->layout()->content; ?><?php echo $this->layout()->content; ?> </div></div> </body></body>

Page 22: ZF Básico - 6. Autenticação

2222

Protegendo os ActionsProtegendo os Actions Adicione ao seu IndexController.php:Adicione ao seu IndexController.php:function preDispatch() {function preDispatch() {

$auth = Zend_Auth::getInstance();$auth = Zend_Auth::getInstance();

if (!$auth->hasIdentity()) {if (!$auth->hasIdentity()) {

$this->_redirect('/auth/login/');$this->_redirect('/auth/login/');

}}

}}

Page 23: ZF Básico - 6. Autenticação

2323

Do it!Do it!

Escreva o código e rode a aplicação.Escreva o código e rode a aplicação.