Post

nginx-authentification-base-mysql

nginx-authentification-base-mysql

nginx-authentification-base-mysql

Authentification

Création dossier
sudo mkdir /var/www/login
Virtualhost
sudo nano /etc/nginx/conf.d/login.cinay.pw.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name login.cinay.pw;
    root /var/www/login;

    include ssl_params;
    include header_params;
    include dh_param;
    index index.php index.html index.htm;
        location ~ \.php$ {
           fastcgi_split_path_info ^(.+\.php)(/.+)$;
           fastcgi_pass unix:/run/php/php7.0-fpm.sock;    # PHP7.0 
           fastcgi_index index.php;
           include fastcgi_params;
	   fastcgi_param SCRIPT_FILENAME $request_filename;
        }

    access_log /var/log/nginx/map.cinay.pw-access.log;
    error_log /var/log/nginx/map.cinay.pw-error.log;
}

Créer base utilisateurs mariadb
mysql -uroot -p8Niy3BzgYu422N -e "CREATE DATABASE utilisateurs; GRANT ALL PRIVILEGES ON utilisateurs.* TO 'utilisateurs'@'localhost' IDENTIFIED BY 'm9pB26Fd'; FLUSH PRIVILEGES;"
Créer une table users
mysql -uroot -p8Niy3BzgYu422N utilisateurs -e "CREATE TABLE users (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,username VARCHAR(30) NOT NULL,password VARCHAR(255) NOT NULL,email VARCHAR(50),reg_date TIMESTAMP);"
Insertion d’un utilisateur
mysql -uroot -p8Niy3BzgYu422N utilisateurs -e 'INSERT INTO users(username, password) VALUES("yannick", "$2y$10$HFY4XC9C.lSaGEbQMokQWOryO9dGqUtnLelzY3DEwcShUEP94XhQW");'
Affichage
mysql -uroot -p8Niy3BzgYu422N utilisateurs -e "select * from users;"

Enregistrement
sudo nano /var/www/login/register.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
//Connexion à la base de données
//(via PDO, utilisez la méthode de votre choix comme le type de base de données de votre choix)
$pdo = new PDO(
    'mysql:host=localhost;dbname=utilisateurs', 'utilisateurs', 'm9pB26Fd');
	
//On vérifie que l'utilisateur a bien envoyé les informations demandées 
if(isset($_POST["username"]) && isset($_POST["password"]) && isset($_POST["password2"])){
	//On vérifie que password et password2 sont identiques
	if($_POST["password"] == $_POST["password2"]){
		//On utilise alors notre fonction password_hash :
		$hash = password_hash($_POST["password"], PASSWORD_DEFAULT);
		//Puis on stock le résultat dans la base de données :
		$query = $pdo->prepare('INSERT INTO users (username, password) VALUES(:username, :password);');
		$query->bindParam(':username', $_POST["username"]);
		$query->bindParam(':password', $hash);
		$query->execute();
		header('Location: index.php');
		exit();
	}
}
?>

Vérification connexion
sudo nano /var/www/login/login.php

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
<?php
echo "test connexion<br />";
//Connexion à la base de données
//(via PDO, utilisez la méthode de votre choix comme le type de base de données de votre choix)
$pdo = new PDO(
    'mysql:host=localhost;dbname=utilisateurs', 'utilisateurs', 'm9pB26Fd');
	
//Nous vérifions que l'utilisateur a bien envoyé les informations demandées 
if(isset($_POST["username"]) && isset($_POST["password"])){

echo "utilisateur : ".$_POST["username"]."<br />";
echo "mp : ".$_POST["password"]."<br />";

	//Nous allons demander le hash pour cet utilisateur à notre base de données :
	$query = $pdo->prepare('SELECT password FROM users WHERE username = :username');
	$query->bindParam(':username', $_POST["username"]);
	$query->execute();
	$result = $query->fetch();
	$hash = $result[0];
	
	//Nous vérifions si le mot de passe utilisé correspond bien à ce hash à l'aide de password_verify :
	$correctPassword = password_verify($_POST["password"], $hash);
	
	if($correctPassword){
		//Si oui nous accueillons l'utilisateur identifié
		echo "Bienvenue ".$_POST["username"];
	}else{
		//Sinon nous signalons une erreur d'identifiant ou de mot de passe
                echo "le hash lu dans la base : ".$hash."<br />";
		echo "login/password incorrect";
	}

}
?>

Fichier index.html
sudo nano /var/www/login/index.html

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
<!DOCTYPE html>
<html >
<head>
  <meta charset="UTF-8">
  <title>login.cinay.pw</title>
  
  <link rel="stylesheet" href="css/style.css" />
  <!--<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>-->

</head>

<body>
  <div class="body"></div>
		<div class="grad"></div>
		<div class="header">
			<div>Site<span>cinay.pw</span></div>
		</div>
		<br>
		<div class="login">
			<form action="login.php" method="POST">
				<input type="text" placeholder="utilisateur" name="username"><br>
				<input type="password" placeholder="mot de passe" name="password"><br>
				<input type="button" value="Connexion">
			</form>
				<a href="#">Mot de passe oublié?</a>
				<a href="#">Enregistrement</a>
		</div>
  <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>

  
</body>
</html>

css

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
.login input[type=submit]{
        width: 260px;
        height: 35px;
        background: #fff;
        border: 1px solid #fff;
        cursor: pointer;
        border-radius: 2px;
        color: #a18d6c;
        font-family: 'Exo', sans-serif;
        font-size: 16px;
        font-weight: 400;
        padding: 6px;
        margin-top: 10px;
}

.login input[type=submit]:hover{
        opacity: 0.8;
}

.login input[type=submit]:active{
        opacity: 0.6;
}

.login input[type=submit]:focus{
        outline: none;
}

Cet article est sous licence CC BY 4.0 par l'auteur.