LexikJWTBundle:找不到POST / api / login_check的路由

时间:2015-05-10 18:51:59

标签: angularjs symfony

我正在使用LexikJWTBundle来验证symfony2REST API的离子angularjs应用程序。

我的问题是,当我尝试对用户进行身份验证时,Symfony会返回:找不到POST / api / login_check的路由。

EDIT 我已经将路由放在我的休息路由文件中,因此生成的路由是/ api / api / login_check。 现在错误是:找不到路径" / api / login_check"的控制器。 看起来LexikJWTBundle并没有拦截这个电话。 结束编辑

我确切地知道我的api在没有身份验证的情况下工作正常,并且使用CORS虽然是NelmioCorsBundle。

这是我的routing.yml部分:

api_login_check:
    path: /api/login_check

这是我的config.yml

lexik_jwt_authentication:
    private_key_path: %kernel.root_dir%/var/jwt/private.pem   # ssh private key path
    public_key_path:  %kernel.root_dir%/var/jwt/public.pem    # ssh public key path
    pass_phrase:      'passphrase'                                      # ssh key pass phrase
    token_ttl:        86400                                   # token ttl - defaults to 86400

这是我的security.yml:

# app/config/security.yml
security:

    encoders:
        FOS\UserBundle\Model\UserInterface: sha512

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email


    firewalls:
        dev:
            pattern: ^/{_{profiler|wdt}}/
            security: false
            switch_user: true
        main:
            pattern: .*
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
            logout:       true
            anonymous:    true
            switch_user: true
#       JWT SETUP
        login:
            pattern:  ^/api/login
            stateless: true
            anonymous: true
            form_login:
                check_path:               /api/login_check
                username_parameter: username
                password_parameter: password
                success_handler:          lexik_jwt_authentication.handler.authentication_success
                failure_handler:          lexik_jwt_authentication.handler.authentication_failure
                require_previous_session: false
#       JWT SETUP
        api:
            pattern:   ^/api
            stateless: true
            lexik_jwt:
                authorization_header:
                    enabled: true
                    prefix:  Bearer
                query_parameter:
                    enabled: true
                    name:    bearer

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

2 个答案:

答案 0 :(得分:1)

要使用表单登录,您需要创建check_path路由。路径必须指向空控制器,并由安全系统拦截。

只需为/api/login_check创建一个空控制器,并将api_login_check路由指向它。

此信息位于以下文档中。

Documentation

答案 1 :(得分:0)

您需要确保通过 HEADER 'content-type': 'application/json'发送 POST 请求,并且数据必须使用 JSON