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 :

[Symfony 5] Routage


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 11
    Points : 9
    Points
    9
    Par défaut [Symfony 5] Routage
    Bonjour,

    J'ai un projet en Symfony 5 ou on s'inscrit, se connecte, etc...
    Ça fonctionne bien, mais j'aimerais savoir si c'est possible de faire ça :

    - Dès le lancement du server l'utilisateur est dirigé vers la page d'inscription (Register.html.twig) et si il va sur une autre page il est redirigé vers la page d'inscription (Il peut toutefois aller sur la page de connexion (Login.html.twig).

    - Une fois inscrit il va sur la page Login (Login.html.twig)

    - Et une fois connecté il a accès à la page Home (home.html.twig)

    Pour faire simple le schéma de navigation souhaité serait celui là : Lance le server --> Arrive sur Register (et il peut aller sur Login si il a déjà un compte) --> Login --> Home

    Est ce possible et comment je pourrais faire ça ? (Surement avec le access_control)

    Merci

  2. #2
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Bonjour,

    Acces Control vérifie les droits de l'utilisateur, si l'utilisateur ne les as pas une AccessDeniedException.
    Par défaut, le traitement par le framework de l'AccessDeniedException est le suivant :
    • Si l'utilisateur n'est pas connecté, on le redirige vers la page de login,
    • S'il est identifié, on laisse l'erreur 403 se propager.


    Donc tu dois commencer par déclarer les routes login et inscriptions comme autorisée à tout le monde et toutes les autres comme restreinte au ROLE_USER (le rôle obtenu dès identification)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        access_control:
            # We must be Anonymous to register or to login
            - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/register$, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/, role: ROLE_USER }
    Par défaut, le fonctionnement de symfony fait qu'il redirige toute requête d'utilisateur non authentifié vers la page de login. Je n'arrive pas trouver l'endroit où on pourrait configurer une autre route et j'ai bien l'impression que ce n'est pas prévu, surtout quand je regarde le code source de Symfony.

    Alors, voilà ce que j'essaierai à ta place :

    Essaie de créer une classe qui implémente AccessDeniedHandlerInterface et configure le firewall pour l'utiliser. Voici un billet sur le blog de Symfony qui en parle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class MonAccessDeniedHandler implements AccessDeniedHandlerInterface
    {
        public function handle(Request $request, AccessDeniedException $accessDeniedException)
        {
            // SI l'utilisateur est identifié, c'est par exemple qu'un utilisateur identifié et non administrateur essaie d'aller sur une page admin
                return new Response($content, 403);
            // SINON
                return new RedirectResponse(/** La route de ton register **/);
        }
    }
    De mémoire, la configuration du nouvel handler se fait dans config/package/security.yaml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    firewalls:
        default:
            ...
            access_denied_handler: App/Security/MonAccessDeniedHandler
    Je te recommande de regarder comment l'AccessDeniedHandler par défaut est codé pour essayer de changer la donne. Je ne l'ai pas trouvé dans le code source, je ne peux pas te donner le lien.

    N'hésite pas à revenir si tu as besoin d'aide et n'hésite pas non plus à nous montrer comment tu as fait !

    Merci !
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Bon merci beaucoup, juste en ajoutant les path dans le access control ça marche bien, même si on va sur la page login par défaut c'est correct.
    J'avais juste le path pour le login et le register était inaccessible je pensais pas on pouvait mettre un path de plus

  4. #4
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Oui, en effet, on peut ajouter autant de lignes qu'on le souhaite. Comme dans un Firewall, la première ligne qui répond au critère de l'expression régulière est utilisée.

    Vas-tu essayer de rediriger l'utilisateur vers la page d'inscription plutôt que vers la page d'identification ?
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Ca sera en option je pense, il reste pas mal de chose a faire en priorité.
    Si je le fait je le mettrais ici.

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

Discussions similaires

  1. [3.x] Problème de routage dans Symfony 3
    Par etienne31 dans le forum Symfony
    Réponses: 1
    Dernier message: 06/03/2016, 11h26
  2. Routage Symfony/Doctrine
    Par shark59 dans le forum ORM
    Réponses: 27
    Dernier message: 06/12/2010, 09h23
  3. routage symfony doctrine
    Par superpilou dans le forum ORM
    Réponses: 0
    Dernier message: 26/02/2010, 12h36
  4. [MS-EXCHANGE] groupe de routage
    Par nabil dans le forum Exchange Server
    Réponses: 2
    Dernier message: 02/08/2007, 17h51
  5. [Routage] Linux et As400
    Par motchoffo dans le forum Développement
    Réponses: 1
    Dernier message: 08/01/2005, 17h41

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