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 :

Authentification et Gestion Utilisateur


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Par défaut Authentification et Gestion Utilisateur
    Bonjour à tous,
    Actuellement sur un projet PHP pour création d'un blog modèle mvc ( Mon premier projet mvc ) pour cela j'ai suivi un tutoriel que je voudrais à présent améliorer.

    Je fais face à un problème pour mon Module de Connexion.

    Pour commencer le blog j'ai crée un système d’authentification
    à l'aide d'un fichier xml qui sauvegarde mes identifiants.

    App.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="utf-8" ?>
    <definitions>
        <define var="login" value="admin" ></define>
        <define var="pass" value="admin" ></define>
    </definitions>
    Je voudrais remplacer celui_ci par ma base de données où j'ai crée une table "Users".

    Cependant je ne sais pas comment Modifier mon Controlleur pour que cela fonctionne !

    Voici le Code de mon ConnexionController.php

    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
    class ConnexionController extends BackController
    {
        public function executeIndex(HTTPRequest $request)
        {
            $this->page->addVar('title', 'Connexion');
     
            if ($request->postExists('login')) {
                $login = $request->postData('login');
                $password = $request->postData('password');
     
                if ($login == $this->app->config()->get('login') && $password == $this->app->config()->get('pass')) {
                    $this->app->user()->setAuthenticated(true);
                    $this->app->httpResponse()->redirect('.');
                } else {
                    $this->app->user()->setFlash('Le pseudo ou le mot de passe est incorrect.');
                }
            }
        }
     
    }
    Ainsi que sa Classe Mère le BackController.php

    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
    abstract class BackController extends ApplicationComponent
    {
        protected $action = '';
        protected $module = '';
        protected $page = null;
        protected $view = '';
        protected $managers = null;
     
        public function __construct(Application $app, $module, $action)
        {
            parent::__construct($app);
     
            $this->managers = new Managers('PDO', PDOFactory::getMysqlConnexion());
            $this->page = new Page($app);
     
            $this->setModule($module);
            $this->setAction($action);
            $this->setView($action);
        }
     
        public function execute()
        {
            $method = 'execute'.ucfirst($this->action);
     
            if (!is_callable([$this, $method]))
            {
                throw new \RuntimeException('L\'action "'.$this->action.'" n\'est pas définie sur ce module');
            }
     
            $this->$method($this->app->httpRequest());
        }
     
        public function page()
        {
            return $this->page;
        }
     
        public function setModule($module)
        {
            if (!is_string($module) || empty($module))
            {
                throw new \InvalidArgumentException('Le module doit être une chaine de caractères valide');
            }
     
            $this->module = $module;
        }
     
        public function setAction($action)
        {
            if (!is_string($action) || empty($action))
            {
                throw new \InvalidArgumentException('L\'action doit être une chaine de caractères valide');
            }
     
            $this->action = $action;
        }
     
        public function setView($view)
        {
            if (!is_string($view) || empty($view))
            {
                throw new \InvalidArgumentException('La vue doit être une chaine de caractères valide');
            }
     
            $this->view = $view;
     
            $this->page->setContentFile(__DIR__.'/../../App/'.$this->app->name().'/Modules/'.$this->module.'/Views/'.$this->view.'.php');
        }
    }
    J'ai réfléchi à la requête SQL que je devrais utiliser mais comme je le disais je ne sais pas comment l'intégrer dans mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $sql = 'SELECT pseudo,password FROM users WHERE pseudo = :pseudo AND password = :password';

    Merci d'avance pour votre réponse et pour aide !
    N'hésitez pas à me demander si vous avez besoin de plus de renseignements sur les classes adjacentes !

  2. #2
    Membre éprouvé Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->app->config()->get('login')
    c'est ce que cette méthode fait qu'il faut changer pour aller chercher dans la bdd plutôt que dans le fichier xml, il faudra aussi lui passer en argument tes variables POST.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Par défaut
    Merci Jisig pour ta réponse rapide !

    j'ai modifié le code du ConnexionController.php

    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
     public function executeIndex(HTTPRequest $request)
        {
            $this->page->addVar('title', 'Connexion');
    
            if ($request->postExists('login')) {
                $login = $request->postData('login');
                $password = $request->postData('password');
                $sql = 'SELECT pseudo,password FROM users WHERE pseudo = :pseudo AND password = :password';
                if ($login == pseudo.bdd and $password == password.bdd) {
                    $this->app->user()->setAuthenticated(true);
                    $this->app->httpResponse()->redirect('.');
                } else {
                    $this->app->user()->setFlash('Le pseudo ou le mot de passe est incorrect.');
                }
            }
        }
    Je dois remplacer les variables " pseudo.bdd et password.bdd " donc avec des Variables POST, pourrais-tu m'aider pour l'écriture exacte ?

  4. #4
    Membre éprouvé Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Par défaut
    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
    public function executeIndex(HTTPRequest $request)
        {
            $this->page->addVar('title', 'Connexion');
     
            if ($request->postExists('login')) {
                $login = $request->postData('login');
                $password = $request->postData('password');
                $sql = 'SELECT pseudo,password FROM users WHERE pseudo = ' . $login . ' AND password = ' . $password;
                if (...) { // dans cette condition tu vérifies si tu as bien récupéré le user depuis ta requête sql
                    $this->app->user()->setAuthenticated(true);
                    $this->app->httpResponse()->redirect('.');
                } else {
                    $this->app->user()->setFlash('Le pseudo ou le mot de passe est incorrect.');
                }
            }
        }
    pour moi ça devrait ressembler à un truc du genre

    ps : je mettrais plutôt ça dans la partie modèle que controller, manipuler les données depuis les modèles et laisser aux controllers l'aspect logique de l'app.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Par défaut
    Merci Jisig ! Désolé pour le temps de réponse je recherche des solutions sur la doc PHP en même temps

    Voici le code du ConnexionController.php à nouveau

    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
     public function executeIndex(HTTPRequest $request)
        {
            $this->page->addVar('title', 'Connexion');
     
            if ($request->postExists('login')) {
                $login = $request->postData('login');
                $password = $request->postData('password');
                $db = ('SELECT pseudo,password FROM users WHERE pseudo = ' . $login . ' AND password = ' . $password);
                if ($login == $_POST['pseudo'] and $password == $_POST['password']) {
                    $this->app->user()->setAuthenticated(true);
                    $this->app->httpResponse()->redirect('.');
                } else {
                    $this->app->user()->setFlash('Le pseudo ou le mot de passe est incorrect.');
                }
            }
        }
    J'ai ce message d'erreur pour le moment lorsque je rentre un pseudo et un password :

    Notice: Undefined index: pseudo in C:\wamp\www\projet3\App\Backend\Modules\Connexion\ConnexionController.php on line 24


    Je ne dois pas encore l'écrire correctement ...

  6. #6
    Membre éprouvé Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Par défaut
    je suppose que tu as bien ta connexion à ta bdd.

    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
    public function executeIndex(HTTPRequest $request)
        {
            $this->page->addVar('title', 'Connexion');
     
            if ($request->postExists('login')) {
                $login = $request->postData('login');
                $password = $request->postData('password');
                if (mysql_query ('SELECT count(*) FROM users WHERE pseudo = ' . $login . ' AND password = ' . $password) == 1) { // ça doit te retourner un résultat (vu qu'un login est unique) à condition que le mot de passe est bon bien sûr ! après tu traites ça comme tu le sens :) 
                    $this->app->user()->setAuthenticated(true);
                    $this->app->httpResponse()->redirect('.');
                } else {
                    $this->app->user()->setFlash('Le pseudo ou le mot de passe est incorrect.');
                }
            }
        }
    ça devrait ressembler à quelque chose du genre, après je ne sais pas si tu utilises pdo... mais le principe reste le même.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. module authentification et gestion des utilisateurs
    Par Msysteme dans le forum ASP.NET
    Réponses: 2
    Dernier message: 21/05/2015, 15h40
  2. Replica et gestion utilisateurs
    Par odelayen dans le forum Access
    Réponses: 4
    Dernier message: 09/06/2006, 13h53
  3. [Authentification Realm] Infos utilisateur et redirection
    Par mamiberkof dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 22/04/2006, 22h16
  4. [LDAP] Authentification d'un utilisateur
    Par toctof dans le forum Sécurité
    Réponses: 7
    Dernier message: 13/12/2005, 18h21
  5. Gestion utilisateurs avec droits
    Par dr_look dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 27/04/2005, 16h03

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