Vamos construir um sistema simples de autenticação utilizando o ExtJS. Feito o Download, vamos iniciar nosso sistema carregando a biblioteca do ExtJS para montarmos o nosso sistema de login. Nosso ponto de partida é o arquivo Index.php com a estrutura HTML a seguir:
Index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<link rel="stylesheet" type="text/css" href="/igs/includes/ext/resources/css/ext-all.css">
<script type="text/javascript" src="/igs/includes/ext/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="/igs/includes/ext/ext-all.js"></script>
<script type="text/javascript" src="login.js"></script>
</head>
<body></body>
</html>
Obviamente, modifique os path de acordo com seu diretório EXT. Veremos o código do Login.js a seguir
Obviamente, modifique os paths de acordo com seu diretório EXT. Veremos o código do Login.js a seguir
Login.js
A seguir vem o login.js. Ele cria o formulário, renderiza uma janela popup, exibe a janela ao usuário, submete os dados via AJAX, e lida com o sucesso e o fracasso de resposta dependendo se o usuário inseriu os dados com sucesso.
Ext.onReady(function(){
Ext.QuickTips.init();
// Crie uma variável para armazenar nosso EXT Form Panel
// Assinamos várias opções de configuração
var login = new Ext.FormPanel({
labelWidth:80,
url:'login.asp',
frame:true,
title:'Entre com seu Login',
defaultType:'textfield',
monitorValid:true,
// Atributos específicos para os campos de usuário/senha.
// O atributo "name" define o nome da variável que será enviada do servidor.
items:[{
fieldLabel:'Usuário',
name:'loginUsername',
allowBlank:false
},{
fieldLabel:'Senha',
name:'loginPassword',
inputType:'password',
allowBlank:false
}],
// Toda a mágica que acontece depois que o usuário clique no botão
buttons:[{
text:'Login',
formBind: true,
// Função que é executada quando o usuário clicar no botão
handler:function(){
login.getForm().submit({
method:'POST',
waitTitle:'Conectando',
waitMsg:'Enviando dados...',
// Função que executa (sucesso ou falha) quando o servidor responder.
// A que será executada é determinada pela
// responsta que virá do login.asp como mostrado abaixo. O servidor responde
// um JSON válido.
// Algo como: response.write "{ success: true}" ou
// responde.write "{ success: false, errors: { reason: 'Falha no Login. Tente novamente.' }}"
// dependendo da lógica que contiver no código de retorno do servidor.
// Se o sucesso ocorrer, o usuário será notificado com uma mensagem de alerta messagebox,
// e quando ele clicar em "Ok", então será redirecionado a qualquer página
// que você tenha definido para redirecionamento.
success:function(){
Ext.Msg.alert('Status', 'Login Successful!', function(btn, text){
if (btn == 'ok'){
var redirect = 'test.php';
window.location = redirect;
}
});
},
// Função de falha, veja comentário sobre re: sucesso e falha.
// Você poderá ver aqui, se o login falhar, chama uma messagebox
// com detalhes da falha
failure:function(form, action){
if(action.failureType == 'server'){
obj = Ext.util.JSON.decode(action.response.responseText);
Ext.Msg.alert('Login Failed!', obj.errors.reason);
}else{
Ext.Msg.alert('Warning!', 'Authentication server is unreachable : ' + action.response.responseText);
}
login.getForm().reset();
}
});
}
}]
});
// Aqui é criado uma janela para agregar o formulário.
// O objeto login é passado como ítem desta janela.
var win = new Ext.Window({
layout:'fit',
width:300,
height:150,
closable: false,
resizable: false,
plain: true,
border: false,
items: [login]
});
win.show();
});
Login.php
Aqui é onde o servidor processa o seu login. Vou me apegar a colocar apenas um código simples para mostrar as respostas que serão retornadas, e tederminar que função o login.js executará (sucesso ou falha). Contanto, aqui é onde você deverá chamar seu banco de dados com o usuário/senha da variável, da autenticação, e por fim enviar uma das mensagens de resposta dependendo se o usuário digirou uma credencial válida.
<?php
$loginUsername = isset($_POST["loginUsername"]) ? $_POST["loginUsername"] : "";
if($loginUsername == "f"){
echo "{success: true}";
} else {
echo "{success: false, errors: { reason: 'Falha no login. Tente novamente.' }}";
}
?>
Ou, você pode usar PHP avançado com array associativo e a função json_encode, e renderizar a resposta em JSON. Isso pode ser útil para não ter trabalho braçal caso esteja utilizando um JSON mais complexo.
<?php
$loginUsername = isset($_POST["loginUsername"]) ? $_POST["loginUsername"] : "";
if($loginUsername == "f"){
$result["success"] = true;
} else {
$result["success"] = false;
$result["errors"]["reason"] = "Falha no Login. Tente novamente.";
}
echo json_encode($result);
?>
Você vai notar uma linha no login.js que redireciona para text.php caso um login bem sucedido aconteça. Esta pode ser, obviamente, qualquer que seja a página principal de sua aplicação.
Baseado no original de David Fitch: Tutorial: Basic Login