Boa tarde a todas e todos,
Segui o tutorial do vídeo de scriptcase (Scriptcase 8.1 - Modulo segurança + App Blank (integração com login responsivo)) em: https://www.youtube.com/watch?v=--jUxlwL0sM
Fiz algumas mudanças. Criei uma blank usando o bootstrap, o sistema tá logando normal, tudo certinho. Estou tendo problema em relação as variáveis globais que o módulo de segurança deve “setar”.
Se eu rodo a aplicação padrão gerada pelo módulo de segurança, as variáveis são “setadas” normalmente. Na aplicação blank isso não acontece e estranhamente apenas é “setada” a variável [usr_name].
Código onExecute da Blank:
start();
$str_error_msg = "";
if(isset($_POST['login']) && !empty($_POST['login']) && isset($_POST['password']) && !empty($_POST['password'])) {
$str_output = validate($_POST['login'], $_POST['password']);
if($str_output != 'NM_OK_NM') {
$str_error_msg = $str_output;
?>
<div class="alert alert-danger alert-dismissible" style="z-index: 1; position: absolute; margin: 20vh 30vw 20vh 30vw">
<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>
<strong>Erro!</strong> Usuário/Senha inválidos ou Usuário não ativo. Dúvidas, contate o suporte.
</div>
<?php
}
else {
sc_redir('menu_proponente');
}
}
?>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.1/css/font-awesome.min.css" rel="stylesheet" type="text/css">
<link href="http://v4.pingendo.com/assets/bootstrap/themes/default.css" rel="stylesheet" type="text/css">
<style>
/* Full-width input fields */
input[type=text], input[type=password] {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
border-radius: 10px;
}
/* Set a style for all buttons */
button {
background-color: #264A7A;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
cursor: pointer;
width: 100%;
border-radius: 10px;
}
/* Extra styles for the cancel button */
.cadastraruser {
width: auto;
padding: 10px 18px;
background-color: #308d41;
}
/* Center the image and position the close button */
.imgcontainer {
text-align: center;
margin: 24px 0 12px 0;
position: relative;
}
img.avatar {
width: 40%;
border-radius: 50%;
}
.container {
padding: 16px;
}
span.psw {
/*float: right;*/
padding-top: 16px;
}
/* The Modal (background) */
.modal {
display: none; /* Hidden by default */
position: fixed; /* Stay in place */
z-index: 1; /* Sit on top */
left: 0;
top: 0;
width: 100%; /* Full width */
height: 100%; /* Full height */
overflow: auto; /* Enable scroll if needed */
background-color: rgb(0,0,0); /* Fallback color */
background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
padding-top: 60px;
}
/* Modal Content/Box */
.modal-content {
background-color: #fefefe;
margin: 5% 10% 15% 10%; /* 5% from the top, 15% from the bottom and centered */
border: 1px solid #888;
width: 80%; /* Could be more or less, depending on screen size */
}
/* The Close Button (x) */
.close {
position: absolute;
right: 25px;
top: 0;
color: #000;
font-size: 35px;
font-weight: bold;
}
.close:hover,
.close:focus {
color: red;
cursor: pointer;
}
/* Add Zoom Animation */
.animate {
-webkit-animation: animatezoom 0.6s;
animation: animatezoom 0.6s
}
@-webkit-keyframes animatezoom {
from {-webkit-transform: scale(0)}
to {-webkit-transform: scale(1)}
}
@keyframes animatezoom {
from {transform: scale(0)}
to {transform: scale(1)}
}
/* Change styles for span and cancel button on extra small screens */ @media
screen and (max-width: 300px) { span.psw { display: block;
float: none; } .cadastraruser { width: 100%; } }
</style>
</head>
<body>
<div class="section section-fill-height section-opaque-light text-xs-center">
<div class="background-image" style="background-image: url("http://acaicomfarinha.com.br/fcplogo-cortada.png");"></div>
<div class="container">
<div class="row">
<div class="col-md-12"><img class="center-block img-fluid img-rounded" src="../_lib/img/grp__NM__img__NM__logo-sgp-150x98.png"> </div>
</div>
<div class="row">
<div class="col-md-12">
<p class="lead pi-draggable pi-item">Sistema de Gestão de Projetos Culturais do Programa Semear</p>
<button onclick="document.getElementById('id01').style.display='block'" style="width:auto;">Acessar</button>
<div class="row">
<div class="col-md-12">
<div class="row">
<br>
<div class="col-md-4">
<img class="center-block img-fluid" src="../_lib/img/grp__NM__img__NM__FCP_Logo80x97.png">
</div>
<div class="col-md-4">
<img class="center-block img-fluid" src="../_lib/img/grp__NM__img__NM__LogoSemear140x81.png" style="margin-top: 8px">
</div>
<div class="col-md-4">
<img class="center-block img-fluid" src="../_lib/img/grp__NM__img__NM__Governo-do-Pará-Horizontal210x81.png" style="margin-top: 27px">
</div>
</div>
</div>
</div>
<div id="id01" class="modal">
<form class="modal-content animate" method="post">
<div class="imgcontainer">
<span onclick="document.getElementById('id01').style.display='none'" class="close" title="Close Modal">×</span>
</div>
<div class="container">
<label><b>Usuário</b></label>
<input type="text" placeholder="Digite o nome de usuário" name="login" required>
<label><b>Senha</b></label>
<input type="password" placeholder="Digite a senha" name="password" required>
<button type="submit" title="Acessar o Sistema">Acessar</button>
</div>
<div class="container" style="background-color:#f1f1f1">
<a href="../app_form_add_users/app_form_add_users.php"><button type="button" class="cadastraruser" title="Cadastrar um novo usuário no sistema">Cadastrar</button></a>
<span class="psw">Esqueceu a <a href="../app_retrieve_pswd/app_retrieve_pswd.php">senha?</a></span>
</div>
</form>
</div>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="https://cdn.rawgit.com/twbs/bootstrap/v4-dev/dist/js/bootstrap.js"></script>
</body>
</html>
<?php
Seguindo as orientações do vídeo, criei os métodos php na blank, baseando-os nos eventos do form appLogin (gerado pelo módulo de segurança do SC).
Método start()
//Application Ini
sc_reset_apl_conf("app_form_add_users");
sc_reset_apl_conf("app_retrieve_pswd");
//Script Ini
sc_reset_apl_status();
sc_reset_global([usr_login], [usr_email]);
//OnLoad
sc_apl_conf('app_form_add_users', 'start', 'new');
Método validate($login,$pass)
$slogin = sc_sql_injection($login);
$spswd = sc_sql_injection(md5($pass));
$sql = "SELECT
priv_admin,
active,
name,
email
FROM sec_users
WHERE login = $slogin
AND pswd = ".$spswd;
sc_lookup(rs, $sql);
if(count({rs}) == 0)
{
sc_log_add('login Fail', {lang_login_fail} . $login);
;
return "Usuário ou Senha incorreto(s)";
}
else if({rs[0][1]} == 'Y')
{
[usr_login] = $login;
[usr_priv_admin] = {rs[0][0]};
[usr_name] = {rs[0][2]};
[usr_email] = {rs[0][3]};
validate_success();
return "NM_OK_NM";
}
else
{
sc_error_message({lang_error_not_active});
sc_error_exit();
return "NM_ERROR_NM";
}
Método validate_success()
$dir = opendir($this->Ini->path_aplicacao . "..");
while ($file = readdir($dir))
{
if ($file != '.' && $file != '..' && $file != '_lib')
{
sc_apl_status($file, 'on');
}
}
closedir($dir);
sc_log_add('login', {lang_login_ok});
Como disse, executando appLogin as variáveis são setadas. Mas rodando a blank, não. As demais situações estão funcionando normalmente, ou seja, verifica o usuário no banco, valida tudo e loga.
Alguém pode me ajudar a enxergar o erro? Pelo que parece está no método validate($login,$pass). Eu o fiz seguindo as orientações do vídeo e o evento onValidade da aplicação padrão do módulo de segurança appLogin é o seguinte:
$slogin = sc_sql_injection({login});
$spswd = sc_sql_injection(md5({pswd}));
$sql = "SELECT
priv_admin,
active,
name,
email
FROM sec_users
WHERE login = $slogin
AND pswd = ".$spswd;
sc_lookup(rs, $sql);
if(count({rs}) == 0)
{
sc_log_add('login Fail', {lang_login_fail} . {login});
;
sc_error_message({lang_error_login});
}
else if({rs[0][1]} == 'Y')
{
[usr_login] = {login};
[usr_priv_admin] = {rs[0][0]};
[usr_name] = {rs[0][2]};
[usr_email] = {rs[0][3]};
}
else
{
sc_error_message({lang_error_not_active});
sc_error_exit();
}
Alguém pode por favor iluminar minha visão, pois não consigo ver onde está o erro.
Muito grato desde já pela atenção.