LexikJWTAuthenticationBundle-无法找到路径“ / api / login_check”的控制器。路由配置错误

时间:2018-08-07 15:55:39

标签: symfony lexikjwtauthbundle

我使用类似文档的配置。这是我的安全文件:

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

role_hierarchy:
    ROLE_ADMIN: [ROLE_USER]

providers:
    fos_userbundle:
        id: fos_user.user_provider.username

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

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

access_control:
- { path: ^/api/login_check, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api,       roles: IS_AUTHENTICATED_FULLY }

和我的路由文件

api_login_check:
     path: /api/login_check

当我在浏览器中进入/ api / login_check时出现错误

  

无法找到路径“ / api / login_check”的控制器。路由配置错误。

有什么主意吗?

2 个答案:

答案 0 :(得分:1)

使用以下命令更改您的security.yml登录防火墙配置:

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

从您的访问控制中删除login_check路径,它应该已经配置

- { path: ^/api/login_check, roles: IS_AUTHENTICATED_ANONYMOUSLY }

答案 1 :(得分:0)

您需要调整访问控制配置:

access_control:
    - { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/api,       roles: IS_AUTHENTICATED_FULLY }

我非常确定您为此使用了API平台,如果您read the documentation here,您会看到登录URL上的访问控制在^/login中使用path,而不是{{ 1}}