Upload
marcos-bezerra
View
3.215
Download
0
Embed Size (px)
DESCRIPTION
Mini-curso sobre Zend Framework - Parte 6
Citation preview
11
Zend FrameworkZend Framework
Parte VI: Autenticação de Parte VI: Autenticação de UsuárioUsuário
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.
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');
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);
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('/');
}}}}
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');
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');
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');
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));
}}
}}
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;
?>?>
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 = '';
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');
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');
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);
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.'; }}
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";
}}
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/');
}}
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();
}}
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();
}}
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.
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>
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/');
}}
}}
2323
Do it!Do it!
Escreva o código e rode a aplicação.Escreva o código e rode a aplicação.