LexikJWTAuthenticationBundle | JwtToken работает, но Аутентификация говорит: «Для доступа к этому ресурсу требуется полная аутентификация». - PullRequest
2 голосов
/ 11 января 2020

Мой токен-логин работает нормально, но если я попытаюсь узнать, полностью ли я вошел по моему маршруту:

UserController. php

/**
  * @Route("/auth/me", name="userIsAuthenticated")
  */
public function authenticated()
{
    return new Response(':-)', Response::HTTP_OK);
}

он просто показывает

Symfony \ Component \ HttpKernel \ Exception \ HttpException: для доступа к этому ресурсу требуется полная аутентификация.

Я обнаружил, что в StackTrace только "symfony \ security-http \" Firewall "появляется и ничего с Lexik?

Я пробовал также jwt.io, если токен работает и все работает.

security.yaml

security:
    encoders:
        App\Entity\User:
            algorithm: auto

    providers:
        app_user_provider:
            entity:
                class: App\Entity\User
                property: email

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


        login:
            pattern:  ^/auth
            stateless: true
            anonymous: true
            json_login:
                check_path:               /auth
                success_handler:          lexik_jwt_authentication.handler.authentication_success
                failure_handler:          lexik_jwt_authentication.handler.authentication_failure


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

    access_control:
         - { path: ^/auth/me, roles: IS_AUTHENTICATED_FULLY }

1 Ответ

2 голосов
/ 12 января 2020

Проблема заключалась в том, что мой маршрут / auth / me собирался использовать брандмауэр / auth. Брандмауэр / auth не имеет аутентификатора lexik в конфигурации.

Мне просто нужно изменить ^/auth на ^/auth$, и все в порядке.

Знак $ не позволяет брандмауэру работать на что-то вроде

/auth/me
/auth/example
/auth/anotherexample
...

Используется только точное совпадение /auth route: -)

...