IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Difficultés à créer l'espace d'authentification


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Journaliste - formateur web
    Inscrit en
    Octobre 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Journaliste - formateur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2017
    Messages : 35
    Par défaut Difficultés à créer l'espace d'authentification
    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

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 699
    Par défaut
    en ce qui concerne l'erreur "fichier introuvable", il faut que vous respectiez la casse des noms de fichier.
    donc dans le répertoire "controller" le fichier doit s'appeler "controllerConnexion.php", et dans le répertoire "view" doit se trouver un répertoire "Connexion"

    ensuite dans le fichier template.php, mettez aussi "content/Style.css" (avec un "c" minuscule au début)

Discussions similaires

  1. Créer un espace de stockage partagé
    Par EvilAngel dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 23/08/2006, 08h58
  2. [Sécurité] Créer un espace restreint
    Par cyberdevelopment dans le forum Langage
    Réponses: 1
    Dernier message: 19/08/2006, 22h14
  3. créer un espace personnel pour chaque membre
    Par loady dans le forum Langage
    Réponses: 1
    Dernier message: 26/07/2006, 12h54
  4. Créer un formulaire d'authentification
    Par horri dans le forum Langage
    Réponses: 6
    Dernier message: 09/05/2006, 19h22
  5. [RegEx] difficulté à créer un motif de recherche
    Par cyberzoide dans le forum Langage
    Réponses: 3
    Dernier message: 16/11/2005, 18h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo