preloader

Authentification et création d...

Authentification et création d'un compte utilisateur avec PHP/PDO et MYSQL

  • Posté par Armel M
  • Le 05 Sep 2020, à 16:46
  • Catégorie: Développement

Dans une application Web, authentifier un utilisateur revient à lui demander de fournir son identifiant et son mot de passe afin d'accéder aux pages et/ou aux ressources protegées de l'application.

En ce qui concerne le traitement des mots de passe, PHP dispose d'une fonction password_verify qui permet de vérifier que le hashage stocké en base de données correspond au mot de passe renseigné par l'utilisateur.

Implémentation du processus d'authentification avec password_verify

 

$dbh = new PDO('mysql:host=localhost;dbname=teste', 'root', 'password');

$stmt = $dbh->prepare("SELECT * FROM users WHERE email LIKE :login" );
$stmt->execute( [ ":login" => $_POST['email'] ] );
$row = $stmt->fetch();

if( $row === TRUE && password_verify( $_POST['password'], $row['password']) ){
    //mise en session des données utilisateurs telles que le login, le nom... 
   //puis on redirige l'utilisateur vers une page protegée
    echo "vous êtes authentifié";
}else{
   echo "Idenfiant ou mdp incorrect";
}

 

Création d'un compte utilisateur

L'utilisateur renseigne son nom, son idenfiant( l'email ) et son mot de passe via un formulaire d'enregistrement puis soumet ce formulaire. Le script suivant traite ce formulaire. Ce script stocke en base de données les informations en provenance du formulaire sachant qu'on ne stocke que le hash du mot de passe mais jamais le mot de passe en clair.

//hash du mot de passe
$passwordHash = password_hash( $_POST['password'] ,PASSWORD_BCRYPT); 
$sql ="INSERT INTO users (name, email, password, created_at, status) VALUES( :name, :login, :password, NOW(),:status ) ";

$stmt = $dbh->prepare( $sql );
$stmt->execute( [
    ":name" => $_POST['name'],
    ":login" => $_POST['email'],
    ":password" => $passwordHash,
    ":status" => "ROLE_USER",
] );

 

La table des utilisateurs:

CREATE TABLE IF NOT EXISTS `users` (
`id` int AUTO_INCREMENT PRIMARY KEY,
`name` varchar(150) NOT NULL,
`email` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL,
`status` varchar(50) NOT NULL,
`created_at` DateTime NOT NULL ,
`updated_at` DateTime 
);
-- default password: admin123
INSERT INTO `users` (`id`, `name`, `email`, `password`, `status`, `created_at`, `updated_at`) VALUES (6, 'John Doe', 'admin@example.com', '$2y$10$4m51MQpp72gpiON6mi6aaOBDkbq3esg1nzNFmF8i0CqH/SfBlxf0G', 'ROLE_ADMIN', '2020-09-05 15:15:10', NULL);

Sources   github