Bonjour à tous,
Je suis en train de créer l’espace authentification demandé dans le projet 3. Pour cela, je me suis inspirée du cours de Baptiste Pesquet.
https://github.com/bpesquet/MonBlog/...on_web_php.pdf
A ce stade, j’ai au moins deux erreurs lors de ma saisie dans le formulaire de connexion :
- Quand je saisis les bons login et mot de passe, j’ai une erreur 500 "Internal server error"
- Quand je ne saisis pas les bons login et mot de passe, j’ai une erreur « Fichier view/Connexion/connect.php ' introuvable. »
J’ai beau me relire. Je ne vois pas où sont mes erreurs :
J'ai pourtant créé une class ControllerConnexion pour gérer la connexion à l'espace admin :
J'ai créé une class ControlleurSecure pour assurer la sécurité de l'espace admin :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70 <?php require_once 'framework/controller.php'; require_once 'model/user.php'; /** * Ce controller sert à gérer la connexion et la déconnexion d'un utilisateur. * Ce controller a besoin de vérifier si un utilisateur existe dans la BDD. * Pour cela, on utilise une class User ajoutée au model. * */ class ControllerConnexion extends Controller { /** * @var User */ private $user; public function __construct() { $this->user = new User(); } public function index() { $this->buildView(); } /** * Si le couple login/mot de passe saisi correspond bien à un utilisateur existant, * son idenfiant ainsi que son login sont ajoutés dans la session, * puis l'utilisateur (maintenant authentifié) est redirigé vers le contrôleur d'administration. * */ public function connect() { if($this->request->parameterExist("login") && $this->request->parameterExist("password")) { $login = $this->request->getParameter("login"); $password = $this->request->getParameter("password"); if($this->user->connect($login, $password)) { $user = $this->user->getUser($login, $password); $this->request->getSession()->setAttribut("idUser", $user['idUser']); $this->request->getSession()->setAttribut("login", $user['login']); $this->redirect("Admin"); } else { $this->buildView(array('errorMsg' => 'Login et/ou mot de passe incorrects'), "index"); } } else { throw new Exception("Action impossible : login et mot de passe non définis."); } } public function disconnect() { $this->request->getSession()->destroy(); $this->redirect("Home"); } }
Dans le controller (class parente), j'ai créé une méthode pour assurer la génération de la vue en fonction de la class.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?php require_once 'framework/controller.php'; /** * Classe parente des controllers soumis à authentification (controlleradmin notamment) * Rappel : une classe abstraite ne peut pas être instanciée. Elle appelle uniquement une ou des méthodes. */ abstract class ControllerSecure extends Controller { public function executeAction($action) { /* * Vérifie sur les données utilisateurs sont ok pour accéder à l'administration (login et password). * Si oui, l'utilisateur est authentifié : l'action continue. * Si non, l'utilisateur est renvoyé par la page d'authentification. */ if($this->request->getSession()->existAttribut("idUser")) { parent::executeAction($action); } else { $this->redirect("Connexion"); } } }
Et dans le routeur, j'ai créé une méthode createController :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 // Génère la vue associée au controller courant protected function buildView($dataView = array()) { // Détermination du nom du fichier vue à partir du nom du controller actuel $classController = get_class($this); // get_class retourne le nom de la classe d'un objet $controller = str_replace("Controller", "", $classController); //Instanciation et génération de la vue $view = new View($this->action, $controller); $view->build($dataView); }
J'ai comme l'impression que mes deux erreurs viennent de ces fichiers, mais je ne comprends pas pourquoi. Si eventuellement, vous auriez une idée, je suis preneuse.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 private function createController(Request $request) { $controller = "Home"; // Contrôleur par défaut if ($request->parameterExist('controller')) { $controller = $request->getParameter('controller'); $controller = ucfirst(strtolower($controller)); } // Création du nom du fichier du contrôleur $classController = "controller" . $controller; $fileController = "controller/" . $classController . ".php"; if (file_exists($fileController)) { // Instanciation du controller adapté à la requête require ($fileController); $controller = new $classController(); $controller->setRequest($request); return $controller; } else throw new Exception("Fichier '$fileController' introuvable"); }
Voici le lien vers mes fichiers sur Github : https://github.com/vanessaasse/projet3
Un grand merci par avance
Vanessa
Partager