Nesse post vou explicar como adicionar autenticação de usuários no @vorticephp, como base para o sistema vamos utilizar o exemplo que já vem com o framework.
Script de BD:
CREATE TABLE IF NOT EXISTS orgaos (
id int(11) NOT NULL AUTO_INCREMENT,
sigla varchar(50) collate utf8_unicode_ci NOT NULL,
nome varchar(150) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
CREATE TABLE IF NOT EXISTS usuarios (
id int(10) UNSIGNED NOT NULL,
nome varchar(50) NOT NULL,
email varchar(60) NOT NULL,
senha char(32) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO usuarios (nome, email, senha) VALUES('Administrador', 'adm@ferrari.eti.br', md5('123'));
eu criei essa tabela com esse usuario e senha no database que já vem configurado no framework para vocês testarem localmente. Você pode configurar a conexão com o seu próprio banco de dados no arquivo app/app.php
Para iniciar vamos criar o objeto do usuário em: app/model/Usuario.php e codificar:
<?php
class Usuario{
public function __construct($id=0, $nome='', $email='', $senha=''){
$this->id = $id;
$this->nome = $nome;
$this->email = $email;
$this->senha = $senha;
}
}
agora que temos o objeto, vamos criar um DAO para realizar operações, crie o arquivo app/model/UsuarioDAO.php e segue o código:
<?php
class UsuarioDAO{
public function getByEmail($email){
$sql = "SELECT * FROM usuarios WHERE email='$email'";
return Database::getInstance()->queryOne($sql);
}
}
vamos para o controller de usuários, crie o arquivo app/controller/UsuarioController.php e segue o codigo inicial:
<?php
class UsuarioController extends Controller{
public function login(){
}
}
Dai a gente cria o nosso formulário de login, edite app/view/usuario/login.php:
<h2>Login</h2>
<fieldset>
<form method="post">
<p><label>E-mail:</label><input type="text" name="email" /></p>
<p><label>Senha:</label><input type="password" name="senha" /></p>
<p><input type="submit" value="Logar!" /></p>
</form>
</fieldset>
Agora com o form criado, vamos editar a action login do controller Usuario, volte e edite o arquivo app/controller/UsuarioController.php:
<?php
class UsuarioController extends Controller{
public function login(){
// se um formulario foi postado
if (post){
// pega as variáveis do post
$email = addslashes(p('email'));
$senha = md5(p('senha'));
// seleciona o usuario, armazena na variavel $u
// e ainda verifica se o usuario existe
if ($u = UsuarioDAO::getByEmail($email)){
// verifica se a senha digitada combina com
// a que está no BD
if ($u->senha == $senha){
// remove a senha do objeto
$u->senha = null;
// grava a session
Session::set("u", $u);
// Cria mensagem de sucesso e redireciona para o index
Post::setSucesso("Olá {$u->nome}, você está logado", new Link(""));
}else
// Retorna erro
Post::setErros("Senha incorreta!");
}else
// Retorna erro
Post::setErros("e-mail não encontrado!");
}
}
}
Para ficar bonita a url vamos criar um route para esta action, edite o arquivo app/routes.php e adicione:
Route::add("^login$", "usuario:login");
Agora o formulário de login já está funcionando, vamos fazer o sistema obrigar o usuario estar logado para fazer qualquer coisa no sistema, para isso edite o arquivo app/controller/MasterController.php, como queremos que para todo o sistema sejá necessário o login, vamos adicionar um construtor nessa classe com o seguinte código:
function __construct(){
// se a session "u" não existir, criar uma com um usuario vazio
if (!Session::get("u")) Session::set("u", new Usuario());
// Se a session u tiver um objeto vazio..
// e o controller/action forem diferentes dos de login
if (Session::get("u")->id == 0 && controller != 'usuario' && action != 'login'){
// redireciona para a tela de login
redirect(new Link("login"));
}
}
Bom, com isso já deve estar tudo funcionando de forma eficiente e simples. Qualquer dúvida ou sugestão mande sem hexitar.