Bonjour,
Aprés avoir suivie le tutoriel de Grafikart sur l'authentification 2 facteurs, TOTP.
J'ai bien suivie le tutoriel, et adapter en fonction de la dernier mise à jour du depot GitHub mais je me retrouve confronter à une erreur.

Erreur :

   $SQLGetInfo = $odb -> prepare("SELECT `username`, `ID`,`status`,`totp_key`,`email` FROM `users` WHERE `username` = :username AND `password` = :password");
          $SQLGetInfo -> execute(array(':username' => $username, ':password' => SHA1($password)));
          $userInfo = $SQLGetInfo -> fetch(PDO::FETCH_ASSOC);

          if ($userInfo['totp_key'] != '')
          {
          header('Location: totp.php');  

          if ($userInfo['status'] == 0)
          {
            $_SESSION['username'] = $userInfo['username'];
            $_SESSION['ID'] = $userInfo['ID'];
            $email = $userInfo['email'];
            $ip = getRealIpAddr();

            $SQL = $odb -> prepare('INSERT INTO `loginlogs` VALUES(:username, :ip, NOW(),id, "")');
            $SQL -> execute(array(':ip' => $ip, ':username' => $username));

              echo '<div class="alert alert-success fade in m-b-15">Identification réussie, s\'il vous plaît patienter!</div><meta http-equiv="refresh" content="2;url=index.php">';

je souhaite que mon utilisateur qui a activer le TOTP puisse utiliser sont appli est la générer et se connecter,

Mais quand je fais des test est que je me connect sa me redirige directement sur la session et non le TOTP

dans la page TOTP j'au juste sa :

         if ($otp->checkTotp(Encoding::base32DecodeUpper($secret), $_POST['code']))
        {
          die ('OK');
         $secret = $userInfo['totp_key'];

Merci au personne qui pourrons m'aider :)

Cordialement,

2 réponses


Lartak
Réponse acceptée

Bonsoir.
C'est tout à fait normal, tu ajoutes le header pour la redirection, mais tu ne stoppes le script juste après, tu devrais faire quelque chose du genre :

$SQLGetInfo = $odb->prepare("SELECT `username`, `ID`,`status`,`totp_key`,`email` FROM `users` WHERE `username` = :username AND `password` = :password");
$SQLGetInfo->execute([':username' => $username, ':password' => SHA1($password)]);
$userInfo = $SQLGetInfo->fetch(PDO::FETCH_ASSOC);

if ($userInfo['totp_key'] != '') {
    header('Location: totp.php');
    exit();
} else {
    if ($userInfo['status'] == 0) {
        $_SESSION['username'] = $userInfo['username'];
        $_SESSION['ID'] = $userInfo['ID'];
    }
    $email = $userInfo['email'];
    $ip = getRealIpAddr();
    $SQL = $odb->prepare('INSERT INTO `loginlogs` VALUES(:username, :ip, NOW(),id, "")');
    $SQL->execute([':ip' => $ip, ':username' => $userInfo['username']]);

    echo '<div class="alert alert-success fade in m-b-15">Identification réussie, s\'il vous plaît patienter!</div><meta http-equiv="refresh" content="2;url=index.php">';
}

pour mieux m'en sortir quand je dévellope