1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
// Création d'un token (jeton ou code) pour la connexion
// 3 ce n'est pas suffisant : au moins 32. Je suis bien d'accord mais comme je l'ai écrit en #7, le message est émis mais n'aboutit pas si je mets plus de 3.
// en plus pour des raisons de sécurité un jeton déjà utilisé ne devra JAMAIS être réutilisé: Je mets le token = NULL, lorsqu'il a été utilisé.
// tu dois définir une contrainte d'unicité sur cette colonne et revoir ton code si l'insertion échoue: OK, c'est fait.
// comment tu construis ton lien ? Voir ligne modifiée et code plus bas.
$token = bin2hex(random_bytes(32));
// Ligne modifiée:
//$link = makeLnkToThisSite(TARGET_FILE, $token);
$link = makeLnkToThisSite(TARGET_FILE, ['id'=>$ctl, 'token'=>$token]);
// Données à enregistrer en base de données
// La valeur par défaut (current_timestamp) de MySQL fonctionne en local avec la version 5.5.57 mais pas avec la version 5.5 en ligne --> t'es sûr ? OUI !
$toSave = [
'pw' => password_hash($toSave['pw'], PASSWORD_BCRYPT, ['cost' => 11]),
BDD_COLS['colToken'] => $token,
BDD_COLS['colCreate'] => date('Y-m-d G:i:s'),
];
if ($ctl = createUser($toSave)) { // Enregistrement du formulaire en base de données
// Si l'enregistrement est bon, transmission du lien de validation avec mot de passe provisoire à l'utilisateur
// Composition du courriel
$mail->setFrom(FROM);
$mail->addAddress($toSave['mail'], $toSave['firstname'].' '.$toSave['lastname']);
$mail->Subject = SUBJECT;
$mail->Body = sprintf(HTML, $link);
$mail->AltBody = sprintf(BRUT, $link);
// c'est étrange : tu remplis ton tableau des erreurs même quand l'envoi à réussi ! Voir remarque du message précédent #9
if ( ! $mail->send()) {
$errors[] = NO_SENT;
} else {
$errors[0] = SENT;
$leave = true;
}
}
} |
Partager