symfony access page d'accueil impossible

Par Gregoire Yakeu, il y a 7 ans


Bonjour à tous , depuis un certains temps j'ai décidé d'apprendre symfony à nouveau ( j'ai laissé pour un bon bout de temps) et cette fois ci je rencontre d'enormes difficultés.

je ne parvient pas à accéder à ma page d'accueil, je suis en train de vouloir faire une api rest avec angular mais je suis bloqué au niveau du parefeu de symfony 3.4

à chaque fois que je tape /api/home, je suis redirigé vers /login et même si je tape /api/login, je suis tjrs redirigé vers /login et cette page n'est pas fonctionelle. j'aimerai bien acceder à /api/home.

il se peut k c'est mon fichier de sécurité, mais je ne comprends pas prkoi

ci dessus mon controller:

<?php namespace AppBundle\Controller; use Symfony\Component\HttpFoundation\Response; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; class DefaultController extends Controller { /** * @Route("/api/home", name="homepage") */ public function indexAction(Request $request) { // replace this example code with whatever you need return new Response('Bienvenue'); } public function testAction(Request $request) { // replace this example code with whatever you need return new Response('Hello'); } /** * @Route("/api/login", name="login") */ public function loginAction(){ return new Response('connected'); } }

security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN

providers:
    fos_userbundle:
        id: fos_user.user_provider.username

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_token_generator: security.csrf.token_manager

            # if you are using Symfony < 2.8, use the following config instead:
            # csrf_provider: form.csrf_provider
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false       

    login:
        pattern:  ^/api/login
        stateless: true
        anonymous: true
        form_login:
            check_path:               /api/login_check
            success_handler:          lexik_jwt_authentication.handler.authentication_success
            failure_handler:          lexik_jwt_authentication.handler.authentication_failure
            require_previous_session: false

    api:
        pattern:   ^/api
        stateless: true
        guard:
            authenticators:
                - lexik_jwt_authentication.jwt_token_authenticator

    refresh:
        pattern:  ^/api/token/refresh
        stateless: true
        anonymous: true

    api_doc:
        pattern: ^/api/doc
        security: false

        logout:       true
        anonymous:    true

    # dev:
    #     pattern: ^/(_(profiler|wdt)|css|images|js)/
    #     security: false

    main:
        anonymous: ~

access_control:
    # - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/api,       roles: IS_AUTHENTICATED_FULLY }
    - { path: ^/api/token/refresh, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, role: ROLE_ADMIN }
routing: gesdinet_jwt_refresh_token: path: /api/token/refresh defaults: { _controller: gesdinet.jwtrefreshtoken:refresh } api_login_check: path: /api/login_check app: resource: '@AppBundle/Controller/' type: annotation fos_user: resource: "@FOSUserBundle/Resources/config/routing/all.xml" app.swagger_ui: path: /api/doc methods: GET defaults: { _controller: nelmio_api_doc.controller.swagger_ui } fos_rest: resource: "@AppBundle/Controller/" type: rest prefix: /api # oc_platform_home: # path: /api/tonson # defaults: # _controller: AppBundle:Default:test # fos_user_security_login: # pattern: /login # defaults: { _controller: AppBundle:Security:login } config.yml imports: - { resource: parameters.yml } - { resource: security.yml } - { resource: services.yml } # Put parameters here that don't need to change on each machine where the app is deployed # https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration parameters: locale: en framework: #esi: ~ #translator: { fallbacks: ['%locale%'] } secret: '%secret%' router: resource: '%kernel.project_dir%/app/config/routing.yml' strict_requirements: ~ form: ~ csrf_protection: ~ validation: { enable_annotations: true } #serializer: { enable_annotations: true } default_locale: '%locale%' trusted_hosts: ~ session: # https://symfony.com/doc/current/reference/configuration/framework.html#handler-id handler_id: session.handler.native_file save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%' fragments: ~ http_method_override: true assets: ~ php_errors: log: true # Twig Configuration twig: debug: '%kernel.debug%' strict_variables: '%kernel.debug%' # Doctrine Configuration doctrine: dbal: driver: pdo_mysql host: '%database_host%' port: '%database_port%' dbname: '%database_name%' user: '%database_user%' password: '%database_password%' charset: UTF8 # if using pdo_sqlite as your database driver: # 1. add the path in parameters.yml # e.g. database_path: '%kernel.project_dir%/var/data/data.sqlite' # 2. Uncomment database_path in parameters.yml.dist # 3. Uncomment next line: #path: '%database_path%' orm: auto_generate_proxy_classes: '%kernel.debug%' naming_strategy: doctrine.orm.naming_strategy.underscore auto_mapping: true # Swiftmailer Configuration swiftmailer: transport: '%mailer_transport%' host: '%mailer_host%' username: '%mailer_user%' password: '%mailer_password%' spool: { type: memory } fos_user: db_driver: orm # other valid values are 'mongodb' and 'couchdb' firewall_name: main user_class: AppBundle\Entity\User service: # this lines mailer: fos_user.mailer.twig_swift from_email: address: "school2d@gmail.com" sender_name: "School2D" lexik_jwt_authentication: private_key_path: '%jwt_private_key_path%' public_key_path: '%jwt_public_key_path%' pass_phrase: '%jwt_key_pass_phrase%' token_ttl: '%jwt_token_ttl%' nelmio_cors: defaults: allow_credentials: false allow_origin: [] allow_headers: [] allow_methods: [] expose_headers: [] max_age: 0 hosts: [] origin_regex: false forced_allow_origin_value: ~ paths: '^/api/': allow_origin: ['*'] allow_headers: ['X-Custom-Auth'] allow_methods: ['POST', 'PUT', 'GET', 'DELETE'] max_age: 3600 '^/': origin_regex: true allow_origin: ['^http://localhost:[0-9]+'] allow_headers: ['X-Custom-Auth'] allow_methods: ['POST', 'PUT', 'GET', 'DELETE'] max_age: 3600 hosts: ['^api\.'] # FOS REST Bundle fos_rest: routing_loader: include_format: false exception: enabled: true exception_controller: 'fos_rest.exception.controller:showAction' messages: 'Symfony\Component\HttpKernel\Exception\HttpException' : true 'Symfony\Component\Security\Core\Exception\BadCredentialsException': true codes: 'Symfony\Component\Security\Core\Exception\BadCredentialsException': 401 view: view_response_listener: true format_listener: rules: - { path: '^/', priorities: ['json'], fallback_format: 'json' } body_listener: enabled: true nelmio_api_doc: ~ # JMS Serializer # jms_serializer: # metadata: # directories: # - { path: '%kernel.root_dir%/Resources/FOSUserBundle/serializer', # namespace_prefix: 'FOS\UserBundle' }

10 réponses

Digivia, il y a 7 ans

Salut Gregoire,

Je ne comprends pas pourquoi tu as un firewall "login"?..

En tous cas, il faut que ton firewall "api" soit placé avant le "main", car c'est toujours lui qui est appelé (d'ou la redirection vers /login, la route par défaut d'un firewall si la clé form_login n'est pas précisée). Du coup, si je ne m'abuse, le chemin /api correspond aussi au pattern "^/" donc il passe dans le premier firewall et ne va même pas voir le second...

Tu peux peut-être essayer une config + simple dans un premier temps :

firewalls: api: pattern: ^/api/ anonymous: true stateless: true guard: authenticators: - 'jwt_token_authenticator' main: pattern: ^/ anonymous: true form_login: # The route name that the login form submits to check_path: security_login_check login_path: security_login_form logout: # The route name the user can go to in order to logout path: security_logout

En espérant que ça puisse t'aider...

Gregoire Yakeu, il y a 7 ans

Merci Digivia pour ta réaction, je modifie comme tu m'as dit et je te rend compte

Gregoire Yakeu, il y a 7 ans

ça ne marche pas

Gregoire Yakeu, il y a 7 ans

Le firewall "login" c'est pour la configuration du bundle LexikJWTAuthenticationBundle pour la génération du token d'identiffication, c'est exactemement comme ça kon a donné dans la doc

Gregoire Yakeu, il y a 7 ans

daccords je vérifie

Gregoire Yakeu, il y a 7 ans

En fait ça m'affiche le code source au lieu de la page

<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Welcome!</title> <style> body { background: #F5F5F5; font: 18px/1.5 sans-serif; } h1, h2 { line-height: 1.2; margin: 0 0 .5em; } h1 { font-size: 36px; } h2 { font-size: 21px; margin-bottom: 1em; } p { margin: 0 0 1em 0; } a { color: #0000F0; } a:hover { text-decoration: none; } code { background: #F5F5F5; max-width: 100px; padding: 2px 6px; word-wrap: break-word; } #wrapper { background: #FFF; margin: 1em auto; max-width: 800px; width: 95%; } #container { padding: 2em; } #welcome, #status { margin-bottom: 2em; } #welcome h1 span { display: block; font-size: 75%; } #comment { font-size: 14px; text-align: center; color: #777777; background: #FEFFEA; padding: 10px; } #comment p { margin-bottom: 0; } #icon-status, #icon-book { float: left; height: 64px; margin-right: 1em; margin-top: -4px; width: 64px; } #icon-book { display: none; } @media (min-width: 768px) { #wrapper { width: 80%; margin: 2em auto; } #icon-book { display: inline-block; } #status a, #next a { display: block; } @-webkit-keyframes fade-in { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes fade-in { 0% { opacity: 0; } 100% { opacity: 1; } } .sf-toolbar { opacity: 0; -webkit-animation: fade-in 1s .2s forwards; animation: fade-in 1s .2s forwards;} } </style> </head> <body> <div id="wrapper"> <div id="container"> <div id="welcome"> <h1><span>Welcome to</span> Symfony 3.4.11</h1> </div> <div id="status"> <p> <svg id="icon-status" width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z" fill="#759E1A"/></svg> Your application is now ready. You can start working on it at:<br> <code>C:\xampp\htdocs\school2D_symfony3.4\Symfony\</code> </p> </div> <div id="next"> <h2>What's next?</h2> <p> <svg id="icon-book" version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="-12.5 9 64 64" enable-background="new -12.5 9 64 64" xml:space="preserve"> <path fill="#AAA" d="M6.8,40.8c2.4,0.8,4.5-0.7,4.9-2.5c0.2-1.2-0.3-2.1-1.3-3.2l-0.8-0.8c-0.4-0.5-0.6-1.3-0.2-1.9 c0.4-0.5,0.9-0.8,1.8-0.5c1.3,0.4,1.9,1.3,2.9,2.2c-0.4,1.4-0.7,2.9-0.9,4.2l-0.2,1c-0.7,4-1.3,6.2-2.7,7.5 c-0.3,0.3-0.7,0.5-1.3,0.6c-0.3,0-0.4-0.3-0.4-0.3c0-0.3,0.2-0.3,0.3-0.4c0.2-0.1,0.5-0.3,0.4-0.8c0-0.7-0.6-1.3-1.3-1.3 c-0.6,0-1.4,0.6-1.4,1.7s1,1.9,2.4,1.8c0.8,0,2.5-0.3,4.2-2.5c2-2.5,2.5-5.4,2.9-7.4l0.5-2.8c0.3,0,0.5,0.1,0.8,0.1 c2.4,0.1,3.7-1.3,3.7-2.3c0-0.6-0.3-1.2-0.9-1.2c-0.4,0-0.8,0.3-1,0.8c-0.1,0.6,0.8,1.1,0.1,1.5c-0.5,0.3-1.4,0.6-2.7,0.4l0.3-1.3 c0.5-2.6,1-5.7,3.2-5.8c0.2,0,0.8,0,0.8,0.4c0,0.2,0,0.2-0.2,0.5c-0.2,0.3-0.3,0.4-0.2,0.7c0,0.7,0.5,1.1,1.2,1.1 c0.9,0,1.2-1,1.2-1.4c0-1.2-1.2-1.8-2.6-1.8c-1.5,0.1-2.8,0.9-3.7,2.1c-1.1,1.3-1.8,2.9-2.3,4.5c-0.9-0.8-1.6-1.8-3.1-2.3 c-1.1-0.7-2.3-0.5-3.4,0.3c-0.5,0.4-0.8,1-1,1.6c-0.4,1.5,0.4,2.9,0.8,3.4l0.9,1c0.2,0.2,0.6,0.8,0.4,1.5c-0.3,0.8-1.2,1.3-2.1,1 c-0.4-0.2-1-0.5-0.9-0.9c0.1-0.2,0.2-0.3,0.3-0.5s0.1-0.3,0.1-0.3c0.2-0.6-0.1-1.4-0.7-1.6c-0.6-0.2-1.2,0-1.3,0.8 C4.3,38.4,4.7,40,6.8,40.8z M46.1,20.9c0-4.2-3.2-7.5-7.1-7.5h-3.8C34.8,10.8,32.7,9,30.2,9L-2.3,9.1c-2.8,0.1-4.9,2.4-4.9,5.4 L-7,58.6c0,4.8,8.1,13.9,11.6,14.1l34.7-0.1c3.9,0,7-3.4,7-7.6L46.1,20.9z M-0.3,36.4c0-8.6,6.5-15.6,14.5-15.6 c8,0,14.5,7,14.5,15.6S22.1,52,14.2,52C6.1,52-0.3,45-0.3,36.4z M42.1,65.1c0,1.8-1.5,3.1-3.1,3.1H4.6c-0.7,0-3-1.8-4.5-4.4h30.4 c2.8,0,5-2.4,5-5.4V17.9h3.7c1.6,0,2.9,1.4,2.9,3.1V65.1L42.1,65.1z"/> </svg> Read the documentation to learn <a href="https://symfony.com/doc/3.4/page_creation.html"> How to create your first page in Symfony </a> </p> </div> </div> <div id="comment"> <p> You're seeing this page because debug mode is enabled and you haven't configured any homepage URL. </p> </div> </div> </body> </html>
Digivia, il y a 7 ans

Oula! Problème de header?...

Gregoire Yakeu, il y a 7 ans

je ne sais pas

Gregoire Yakeu, il y a 7 ans

J'ai vu le problème mais je ne comprends pas ce qu'il faut faire ni pourquoi, il m'oblige à afficher du JSON
voici le message:

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data