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 :

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");
    }
 
}
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
 
<?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");
        }
 
    }
}
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
 
// 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);
   }
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
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");
   }
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.
Voici le lien vers mes fichiers sur Github : https://github.com/vanessaasse/projet3

Un grand merci par avance

Vanessa