Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

biakelly

Ajuda com autenticação de 2 fatores 2FA

Recommended Posts

Meninos, preciso de uma ajudinha.

 

criei meu sistema de autenticação baseado no Google Autenticator, ele funciona bem, mas tenho um problema:

Quando um novo usuário se cadastra ele informa nome, e-mail, usuario e senha, na próxima tela é exibido o QRcode para que ele possa ler e obter a sequencia de 6 digitos a ser requerida no próximo passo. As informações de nome, e-mail, senha, usuario e código de recuperação do autenticator são salvas em banco de dados (utilizo Mysql), quando o usuário se loga é solicitado a autenticação para logar, até ai tudo ótimo.

 

O problema: tenho uma base de dados com 100 alunos já cadastrados e sem o 2FA habilitado. Preciso de uma ajuda para criar obrigatoriedade deste usuário obter o QRcode, o sistema precisa entender que o campo "google-code" da tabela esta vazio e precisa apresentar um QRcode para o usuario ler e gravar na base de dados para que ele possa realizar o acesso ao sistema

 

Para gravar o usuário novo no cadastro faço assim:

registro.php

<?php
// Start Session
session_start();

// Database connection
require __DIR__ . '/config/db_connection.php';
$db = DB();

// Application library ( with DemoLib class )
require __DIR__ . '/library/library.php';
$app = new DemoLib($db);

require_once __DIR__ . '/GoogleAuthenticator/GoogleAuthenticator.php';
$pga = new PHPGangsta_GoogleAuthenticator();
$secret = $pga->createSecret();

$register_error_message = '';

// check Register request
if (!empty($_POST['btnRegister'])) {
    if ($_POST['nome'] == "") {
        $register_error_message = 'NOme é obrigatório!';
    } else if ($_POST['email'] == "") {
        $register_error_message = 'E-mail é obrigatório!';
    } else if ($_POST['usuario'] == "") {
        $register_error_message = 'Senha é obrigatória!';
    } else if ($_POST['senha'] == "") {
        $register_error_message = 'Senha é obrigatória!';
    } else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
        $register_error_message = 'E-mail inválido';
    } else if ($app->isEmail($_POST['email'])) {
        $register_error_message = 'Este e-mail esta sendo utilizado!';
    } else if ($app->isUsername($_POST['username'])) {
        $register_error_message = 'usuário esta sendo utilizado!';
    } else {
        $user_id = $app->Register($_POST['nome'], $_POST['email'], $_POST['usuario'], $_POST['senha'], $secret);
        // set session and redirect user to the profile page
        $_SESSION['user_id'] = $user_id;
        header("Location: confirm_google_auth.php");
    }
}
?>

 

Para logar o usuário estou fazendo assim:

login.php

 

<?php
// Start Session
session_start();

// Database connection
require __DIR__ . '/config/db_connection.php';
$db = DB();

// Application library ( with DemoLib class )
require __DIR__ . '/library/library.php';
$app = new DemoLib($db);

$login_error_message = '';

// check Login request
if (!empty($_POST['btnLogin'])) {

    $usuario = trim($_POST['usuario']);
    $senha = trim($_POST['senha']);

    if ($username == "") {
        $login_error_message = 'O campo Usuário é obrigatório!';
    } else if ($senha == "") {
        $login_error_message = 'O campo Senha é obrigatório!';
    } else {
        $user_id = $app->Login($usuario, $senha);
        if($user_id > 0)
        {
            $_SESSION['user_id'] = $user_id; // Set Session
            header("Location: validar.php"); 
        }
        else
        {
            $login_error_message = 'Campos inválidos!';
        }
    }
}
?>




<form action="index.php" method="post">
                <div class="form-group">
                    <label for="">Usuário / E-mail</label>
                    <input type="text" name="usuario" class="form-control"/>
                </div>
                <div class="form-group">
                    <label for="">Senha</label>
                    <input type="senha" name="senha" class="form-control"/>
                </div>
                <div class="form-group">
                    <input type="submit" name="btnLogin" class="btn btn-primary" value="Acessar"/>
                </div>
            </form>

 

validar.php

<?php
// Start Session
session_start();

// Database connection
require __DIR__ . '/config/db_connection.php';
$db = DB();

// Application library ( with DemoLib class )
require __DIR__ . '/library/library.php';
$app = new DemoLib($db);
$user = $app->UserDetails($_SESSION['user_id']);

require_once __DIR__ . '/GoogleAuthenticator/GoogleAuthenticator.php';
$pga = new PHPGangsta_GoogleAuthenticator();

$error_message = '';

if (isset($_POST['btnValidate'])) {

    $code = $_POST['code'];

    if ($code == "") {
        $error_message = 'Por favor digite um código válido';
    }
    else
    {
        if($pga->verifyCode($user->google-code, $code, 2))
        {
            // success
            header("Location: profile.php");
        }
        else
        {
            // fail
            $error_message = 'Código de autenticação inálido!';
        }
    }
}
?>





			<form method="post" action="login.php">
                <?php
                if ($error_message != "") {
                    echo '<div class="alert alert-danger"><strong>Erro: </strong> ' . $error_message . '</div>';
                }
                ?>
                <div class="form-group">
                    <input type="text" name="code" placeholder="Digite o código de autenticação (2FA)" class="form-control">
                </div>
                <div class="form-group">
                    <button type="submit" name="btnValidate" class="btn btn-primary">Validar</button>
                </div>
            </form>

 

 

 

Me ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.