Ajuda com autenticação de 2 fatores 2FA
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?Discussão (0)
Carregando comentários...