YeAPF inclui\u00a0por padr\u00e3o uma rotina interna de login. Todavia, nem sempre ela \u00e9 suficiente ou adequada para o login de seus usu\u00e1rios, especialmente em sistemas legados. Por isso pode ser \u00fatil criar a nossa pr\u00f3pria rotina de logon.<\/p>\n
Os passos s\u00e3o simples: 1) Indique ao aplicativo para carregar sempre seu script de logon. 2) Escreva sua rotina de logon. Nela autentique o usu\u00e1rio, crie um c\u00f3digo de sess\u00e3o \u00fanico e devolva este no retorno.<\/p>\n
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 \u00e9 otimizado e a performance global \u00e9 melhorada em m\u00e9dia.<\/p>\n
Digamos que seu script chama-se ‘security.php<\/em>‘, acrescente este nome no arquivo includes.lst<\/em> da pasta principal (a mesma onde colocou o configure.php)<\/p>\n O pr\u00f3ximo exemplo espera uma senha em modo limpo (ou seja, sem criptografia). Utilizar\u00e1 o algoritmo md5<\/em>() para exemplificar mas vale a ressalva que n\u00e3o \u00e9 o melhor m\u00e9todo.<\/p>\n Para que o exemplo n\u00e3o fique incompleto, acrescentamos tamb\u00e9m um controle da validade do acesso. Isto \u00e9, se ele \u00e9 um ‘u’ v\u00e1lido e se est\u00e1 dentro do tempo de lat\u00eancia desejado (cinco minutos neste caso)<\/p>\n Feitas estas altera\u00e7\u00f5es, sua pasta precisa ser reconfigurada chamando o\u00a0configure.php<\/em><\/p>\n","protected":false},"excerpt":{"rendered":" YeAPF inclui\u00a0por padr\u00e3o uma rotina interna de login. Todavia, nem sempre ela \u00e9 suficiente ou adequada para o login de seus usu\u00e1rios, especialmente em sistemas legados. Por isso pode ser \u00fatil criar a nossa pr\u00f3pria rotina de logon. Os passos s\u00e3o simples: 1) Indique ao aplicativo para carregar sempre seu script de logon. 2) Escreva […]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[49,8],"tags":[],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5O6UV-4d","jetpack-related-posts":[{"id":254,"url":"http:\/\/www.yeapf.com\/wp\/?p=254","url_meta":{"origin":261,"position":0},"title":"Login para aplicativos YeAPF","date":"janeiro 16, 2016","format":false,"excerpt":"Uma das coisas necess\u00e1rias no desenvolvimento de um aplicativo \u00e9 uma telinha de login. \u00c9 uma bem sucedida entrada a que gera o par\u00e2metro contextual\u00a0u que \u00e9 essencial para a seguran\u00e7a do trip\u00e9 s-u-a do YeAPF. Voc\u00ea precisar\u00e1 uma tela de login que chamaremos neste exemplo de f_login.html, umas modifica\u00e7\u00f5es\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":91,"url":"http:\/\/www.yeapf.com\/wp\/?p=91","url_meta":{"origin":261,"position":1},"title":"Aplicativos mono p\u00e1gina","date":"mar\u00e7o 14, 2014","format":false,"excerpt":"Aplicativos que usam s\u00f3 uma p\u00e1gina t\u00eam um lugar assegurado no desenvolvimento de software atual e futuro. Bem feitos s\u00e3o elegantes e f\u00e1ceis de manter. Tamb\u00e9m s\u00e3o uma m\u00e3o na roda na hora de fazer um aplicativo que funcione tanto em desktop como em mobile. Para construirmos um aplicativo com\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":315,"url":"http:\/\/www.yeapf.com\/wp\/?p=315","url_meta":{"origin":261,"position":2},"title":"Usando o yLexObj() para filtrar dados em um vetor","date":"agosto 22, 2016","format":false,"excerpt":"Digamos que tem uma lista de valores em um vetor grande em JS. N\u00e3o seria bom poder filtrar os dados de forma gen\u00e9rica escrevendo a condicional em uma string e sem ter que usar o eval()\u00a0do javascript? O c\u00f3digo abaixo \u00e9 um exemplo do que pode fazer usando o yloader.js\u2026","rel":"","context":"Em "Yet Another PHP Framework"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":264,"url":"http:\/\/www.yeapf.com\/wp\/?p=264","url_meta":{"origin":261,"position":3},"title":"Versionamento de produ\u00e7\u00e3o","date":"janeiro 21, 2016","format":false,"excerpt":"Fala-se muito em versionamento de c\u00f3digo fonte. Isso est\u00e1 bom e tem muitas ferramentas que fazem isso. O YeAPF inclui certas ferramentas dentre as quais est\u00e1 o ydistbuilder. O prop\u00f3sito desta ferramenta \u00e9 produzir vers\u00f5es de distribui\u00e7\u00e3o. Ou seja, a vers\u00e3o que vai finalmente para o cliente. Em outras palavras,\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":184,"url":"http:\/\/www.yeapf.com\/wp\/?p=184","url_meta":{"origin":261,"position":4},"title":"Exemplo - web01 - OnePage YeAPF Web Application","date":"dezembro 26, 2014","format":false,"excerpt":"Esta \u00e9 uma das continua\u00e7\u00f5es deste artigo. Por que criar aplicativos mono p\u00e1gina? Bom, a grande virtude de um aplicativo mono p\u00e1gina \u00e9 que tudo o que voc\u00ea precisar est\u00e1 pronto assim que o usu\u00e1rio carregou a p\u00e1gina inicial e caso sejam necess\u00e1rias mais p\u00e1ginas, formul\u00e1rios, tabelas elas tamb\u00e9m podem\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"https:\/\/i2.wp.com\/www.yeapf.com\/wp\/wp-content\/uploads\/2019\/05\/office-932926_1920.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":395,"url":"http:\/\/www.yeapf.com\/wp\/?p=395","url_meta":{"origin":261,"position":5},"title":"Instalando android-sdk pelo console","date":"maio 18, 2018","format":false,"excerpt":"Se vai programar para Android com Cordova (com ou sem YeAPF), vai precisar instalar o android-sdk Situa\u00e7\u00e3o A forma mais simples de instalar o android-sdk e gerir ele \u00e9 instalando o Android Studio. Na hora de instalar um SDK ou de fazer atualiza\u00e7\u00e3o dos pacotes ele simplifica bem a coisa.\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"https:\/\/i1.wp.com\/www.yeapf.com\/wp\/wp-content\/uploads\/2018\/05\/Captura-de-Tela-2018-05-18-a\u00cc\u0080s-11.11.09.png?resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/261"}],"collection":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=261"}],"version-history":[{"count":1,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/261\/revisions"}],"predecessor-version":[{"id":262,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/261\/revisions\/262"}],"wp:attachment":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=261"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=261"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=261"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}2) Escreva sua pr\u00f3pria rotina de logon<\/h2>\n
<?php\r\n\r\n function tryLogon($nickName, $password, &$logonRights)\r\n {\r\n \/* the simpliest algorithm is to save a password is md5()\r\n * it's used here only for pedagogic purpouses\r\n * read about security issues here:\r\n * http:\/\/php.net\/manual\/en\/faq.passwords.php *\/\r\n\r\n $md5pass=md5($password);\r\n \/* look for username\/password *\/\r\n $sql=\"select id\r\n from app_users\r\n where username='$nickName'\r\n and password='$md5pass'\";\r\n $id=db_sql($sql);\r\n if ($id>'') {\r\n \/* lock the system (nobody can enter there until system be unlocked) *\/\r\n $lockName=\"userlogon\";\r\n if (lock($lockName)) {\r\n \/* create a timestamp and an id *\/\r\n $now=date('U');\r\n $userId=md5(y_uniqid().$now);\r\n \/* set those values to the user *\/\r\n db_sql(\"update appUsers set userId='$userId', lastClick=$now where id='$id'\");\r\n \/* unlock the system *\/\r\n unlock($lockName);\r\n \/* create 'u' *\/\r\n $GLOBALS['u']=$userId;\r\n return $userId;\r\n }\r\n }\r\n }\r\n\r\n function isValidUser($u)\r\n {\r\n $maxSeconds=5 * 60;\r\n $now=date('U');\r\n $lastClick=db_sql(\"select lastClick from appUsers where userId='$u'\");\r\n $validUser=(($now-$lastClick)<=$maxSeconds);\r\n if ($validUser){\r\n db_sql(\"update appUsers set lastClick=$now where userId='$u'\");\r\n }\r\n return $validUser;\r\n }\r\n?>\r\n<\/pre>\n\u00a03) Reconfigure sua pasta<\/h2>\n