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

Symfony PHP Discussion :

Acces securisé de base


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 31
    Par défaut Acces securisé de base
    Bonjour,

    J'ai refait le tuto du site officiel sur l'accès sécurisé à une partie de mon site selon : http://symfony.com/doc/current/book/security.html

    Mais lorsque sur le bouton de validation, il ne se passe rien. Rien ne se déclenche et aucun message d'erreur. Je n'arrive pas à cerner la source du problème. Le code source de la page généré semble correcte pour lancer le controlleur de check.

  2. #2
    Membre expérimenté

    Inscrit en
    Juin 2008
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 307
    Par défaut
    Sans plus d'informations de ta part, nous ne pourront malheureusement t'aider.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 31
    Par défaut
    Je ne sais pas quoi dire d'autre. Lorsque j'appuie sur le bouton submit, il ne se passe rien. Comme si jamais cela dans le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="#" method="POST">
    .

  4. #4
    Membre éprouvé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Par défaut
    Montre nous le code complet plutôt que le code "comme si j'avais". Là, comme ça, ça peut-être une simple erreur html dans ton form, ou certainement un non affichage de tes erreurs.

    Tu peux commencer par afficher les erreurs dans ton twig.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 31
    Par défaut
    Voici le formulaire généré:
    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
     
    <!DOCTYPE html>
    <html lang="fr">
        <head>
            <title>
                            </title>
     
            <link rel="stylesheet" href="/Symfony/web/bundles/jcbourse/css/css.css" type="text/css" media="all" />
            <script src="/Symfony/web/bundles/jcbourse/js/calcul.js" type="text/javascript"></script>
            <script src="http://code.jquery.com/jquery-1.6.4.js"></script>
     
            <meta charset="utf-8">
        </head>
        <body
     
        <form action="/Symfony/web/app_dev.php/login_check" method="POST">
            <input type="hidden" name="_target_path" value="http://localhost/Symfony/web/app_dev.php/Admin/" />
     
            <div>
                <label for="username">Utilisateur:</label>
                <input type="text" id="username" name="_username" value="" />
            </div>
     
            <div>
                <label for="password">Mot de passe:</label>
                <input type="password" id="password" name="_password" />
            </div>
     
            <input type="submit" name="login" value="Connexion" />
     
        </form>
     
     
    <div id="sfwdt501a4d9d50fca" style="display: none"></div><script type="text/javascript">/*<![CDATA[*/    (function () {        var wdt, xhr;        wdt = document.getElementById('sfwdt501a4d9d50fca');        if (window.XMLHttpRequest) {            xhr = new XMLHttpRequest();        } else {            xhr = new ActiveXObject('Microsoft.XMLHTTP');        }        xhr.open('GET', '/Symfony/web/app_dev.php/_wdt/501a4d9d50fca', true);        xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');        xhr.onreadystatechange = function(state) {            if (4 === xhr.readyState && 200 === xhr.status && -1 !== xhr.responseText.indexOf('sf-toolbarreset')) {                wdt.innerHTML = xhr.responseText;                wdt.style.display = 'block';            }        };        xhr.send('');    })();/*]]>*/</script>
    </body>
    </html>

  6. #6
    Membre éprouvé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Par défaut
    C'est plutôt ton contrôleur, ton template et, là comme il s'agit d'un formulaire, ton type (si tu ne fais pas ça directement dans ton contrôleur) qu'il nous faudrait.

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 31
    Par défaut
    Voici le détail.

    Voici le security.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    secured_area:
              pattern: /.*
              form_login:
                  check_path: /login_check
                  login_path: /login
              logout:
                  path: /logout
                  target: /login
              security: true
              anonymous: true
    Voici le routing.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    _security_login:
        resource: "@JCBourseBundle/Controller/SecurityController.php"
        type:     annotation
     
    _login:
        pattern:  /login
        defaults: { _controller: JCBourseBundle:Security:login }
     
    _security_check:
        pattern:  /login_check
     
    _security_logout:
        pattern:  /logout
    Le controlleur SecurityController.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
    <?php
    namespace JC\BourseBundle\Controller;
     
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\Security\Core\SecurityContext;
     
    class SecurityController extends Controller
    {
        /**
         * @Route("/login", name="_login")
         *
         */
        public function loginAction()
        {
            // ON récupère les erreurs d'authentification si le formulaire a été passé avec de mauvaises informations
            if ($this->get('request')->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
                $error = $this->get('request')->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
            } else {
                $error = $this->get('request')->getSession()->get(SecurityContext::AUTHENTICATION_ERROR);
            }
     
            return $this->render('JCBourseBundle:Default:login.html.twig', array(
                // On envoie à notre vue le login qu'a saisi l'utilisateur précédemment
                'last_username' => $this->get('request')->getSession()->get(SecurityContext::LAST_USERNAME),
                // Et les erreurs qu'il y a eut lors de la validation du formulaire
                'error'         => $error,
            ));
        }
     
        /**
         * @Route("/logout", name="_security_logout")
         *
         */
        public function logoutAction()
        {
            /*
            $session = $this->getRequest()->getSession();
            $token = $session->get('token');
            $this->get("request")->getSession()->invalidate();
            $this->get("security.context")->setToken(null);
            $this->getRequest()->getSession()->remove('token');
             */
            return $this->redirect($this->generateUrl('_login', array()));
        }
    }
    et enfin le login.html.twig:
    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
    {% extends "JCBourseBundle::layout.html.twig" %}
     
    {% block title %}Authentification requise{% endblock %}
     
    {% block content %}
        {% if error %}
            <div class="error">{{ error.message }}</div>
        {% endif %}
     
        <form action="{{ path('_security_check') }}" method="POST">
     
            <input type="hidden" name="_target_path" value="{{ url('_accueil') }}" />
     
            <div>
                <label for="username">Username:</label>
                <input type="text" id="username" name="_username" value="{{ last_username }}" />
            </div>
     
            <div>
                <label for="password">Password:</label>
                <input type="password" id="password" name="_password" />
            </div>
     
            <input type="submit" name="login" value="Connexion" />
     
        </form>
    {% endblock %}

  8. #8
    Membre éprouvé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Par défaut
    Tu peux déjà commencer par afficher toutes les erreurs dans ton twig via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{ form_errors(form) }}
    Il te manque certainement des champs à l'affichage Twig.

    Déjà regarde ce que cela donne avec cela.

    Sinon tu utilises routing.yml plus annotations pour tes routes? Un seul système serait suffisant non?

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 31
    Par défaut
    J'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{ form_errors(form) }}
    mais rien ne s'affiche de plus.

  10. #10
    Membre éprouvé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Par défaut
    Y'a bien un rafraichissement de la page? Ton POST passe bien par login_check?
    Tu peux toujours faire un var_dump pour vérifier.

    Peux-tu poster ton contrôleur login_check?

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 31
    Par défaut
    Non cela ne passe pas. Si je tape directement :/login_check, j'ai cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unable to find the controller for path "/login_check". Maybe you forgot to add the matching route in your routing configuration?

  12. #12
    Membre éprouvé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Par défaut
    Euh oui effectivement... Je ne connais pas le tutorial que tu suis mais si tu n'as pas de Handler pour ton formulaire...
    Tu as bien un contrôleur login_check?

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 31
    Par défaut
    Non sur le site officiel il n'y en a pas sauf si on veut surcharger. Sur les autre sites de tutos que j'ai vu c'est la même chose le controlleur n'est pas obligatoire car il est défini dans le security.yml.

  14. #14
    Membre éprouvé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 141
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="/Symfony/web/app_dev.php/login_check" method="POST">
    La seule chose définie dans ton security.yml pour le moment c'est le path de ton login_check, login_check que tu n'as pas.
    Donc c'est logique qu'il ne se passe rien avec ton formulaire.

  15. #15
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 31
    Par défaut
    J'ai rajouté la méthode (vide) dans le controller mais je crois que cela ne vient pas de là. D'après ce que je vois sur la documentation officielle cela viendra du firewall qui génère ce type d'erreur. Malheureusement malgré cela jene suis pas sûr de moi. Voici le texte : (http://symfony.com/doc/current/book/security.html)

    3. Be sure ``/login_check`` is behind a firewall
    Next, make sure that your check_path URL (e.g. /login_check) is behind the firewall you're using for your form login (in this example, the single firewall matches all URLs, including /login_check). If /login_check doesn't match any firewall, you'll receive a Unable to find the controller for path "/login_check" exception.

Discussions similaires

  1. [Sécurité]Gestion des accès dans plusieurs bases
    Par vincentj dans le forum Débuter
    Réponses: 1
    Dernier message: 05/01/2005, 14h19
  2. accès fortran à une base / utilisation des "bytea"
    Par bdkiller dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/11/2004, 08h31
  3. Réponses: 13
    Dernier message: 11/08/2004, 11h06
  4. Accès à plusieurs bases de données
    Par k4eve dans le forum Hibernate
    Réponses: 11
    Dernier message: 22/04/2004, 15h43
  5. [EJB] Accès concurrents à la base de données
    Par cameleon2002 dans le forum Java EE
    Réponses: 10
    Dernier message: 23/09/2003, 11h31

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