-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconnexion.php
More file actions
56 lines (48 loc) · 1.9 KB
/
connexion.php
File metadata and controls
56 lines (48 loc) · 1.9 KB
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
/**
* Page de connexion (/connexion)
*
* @version 4.0
* @author Alain Barbier alias "Metroidzeta" (fullstack: backend/frontend)
* @author Roger Huang (frontend/design)
*/
$racine = $_SERVER['DOCUMENT_ROOT'];
require $racine . '/CineToile/util/verifSession.php';
require $racine . '/CineToile/util/page_interdite_si_connecte.php';
require $racine . '/CineToile/util/connexionBDD.php';
require $racine . '/CineToile/models/ConnexionModel.php';
$msgErr = '';
// Génération du token CSRF s'il n'existe pas déjà
if (!isset($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Vérification du token CSRF
if (!isset($_POST['csrf_token']) || !hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
die('Erreur CSRF : formulaire invalide ou expiré.');
}
$email = trim($_POST['email'] ?? ''); // On récupére l'email
$password = trim($_POST['password'] ?? ''); // On récupére le mot de passe
if ($email === '' || $password === '') {
$msgErr = 'Tous les champs sont requis';
}
else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$msgErr = 'Email invalide';
} else {
$model = new ConnexionModel($dbh);
$user = $model->getUtilisateurDepuisEmail($email);
if (!$user || !password_verify($password, $user['MOTDEPASSE'])) { // email ou password incorrect
$msgErr = 'Email ou mot de passe incorrect';
} else { // Connexion réussie : stockage en session
session_regenerate_id(true);
$_SESSION['pseudo'] = $user['pseudo'];
$_SESSION['EMAIL'] = $user['EMAIL'];
$_SESSION['csrf_token'] = bin2hex(random_bytes(32)); // Régénérer un nouveau token CSRF pour la session
header('Location:/CineToile/profil');
exit;
}
}
}
$view = $racine . '/CineToile/views/connexionView.php';
require $racine . '/CineToile/views/layout.php';
?>