YeAPF inclui por padrão uma rotina interna de login. Todavia, nem sempre ela é suficiente ou adequada para o login de seus usuários, especialmente em sistemas legados. Por isso pode ser útil criar a nossa própria rotina de logon.
Os passos são simples: 1) Indique ao aplicativo para carregar sempre seu script de logon. 2) Escreva sua rotina de logon. Nela autentique o usuário, crie um código de sessão único e devolva este no retorno.
1) Carregando o script de logon sempre
Contrario ao que poderia parecer, carregar sempre as mesmas partes do script, facilita o trabalho do cache. Em outras palavras, como todo evento carrega sempre o app inteiro, o cache é otimizado e a performance global é melhorada em média.
Digamos que seu script chama-se ‘security.php‘, acrescente este nome no arquivo includes.lst da pasta principal (a mesma onde colocou o configure.php)
2) Escreva sua própria rotina de logon
O próximo exemplo espera uma senha em modo limpo (ou seja, sem criptografia). Utilizará o algoritmo md5() para exemplificar mas vale a ressalva que não é o melhor método.
Para que o exemplo não fique incompleto, acrescentamos também um controle da validade do acesso. Isto é, se ele é um ‘u’ válido e se está dentro do tempo de latência desejado (cinco minutos neste caso)
<?php
function tryLogon($nickName, $password, &$logonRights)
{
/* the simpliest algorithm is to save a password is md5()
* it's used here only for pedagogic purpouses
* read about security issues here:
* http://php.net/manual/en/faq.passwords.php */
$md5pass=md5($password);
/* look for username/password */
$sql="select id
from app_users
where username='$nickName'
and password='$md5pass'";
$id=db_sql($sql);
if ($id>'') {
/* lock the system (nobody can enter there until system be unlocked) */
$lockName="userlogon";
if (lock($lockName)) {
/* create a timestamp and an id */
$now=date('U');
$userId=md5(y_uniqid().$now);
/* set those values to the user */
db_sql("update appUsers set userId='$userId', lastClick=$now where id='$id'");
/* unlock the system */
unlock($lockName);
/* create 'u' */
$GLOBALS['u']=$userId;
return $userId;
}
}
}
function isValidUser($u)
{
$maxSeconds=5 * 60;
$now=date('U');
$lastClick=db_sql("select lastClick from appUsers where userId='$u'");
$validUser=(($now-$lastClick)<=$maxSeconds);
if ($validUser){
db_sql("update appUsers set lastClick=$now where userId='$u'");
}
return $validUser;
}
?>
3) Reconfigure sua pasta
Feitas estas alterações, sua pasta precisa ser reconfigurada chamando o configure.php