使用 LexikJWTAuthenticationBundle 时 JSON 消息无效

Posted

技术标签:

【中文标题】使用 LexikJWTAuthenticationBundle 时 JSON 消息无效【英文标题】:Invalid JSON Message while using LexikJWTAuthenticationBundle 【发布时间】:2019-07-24 08:44:03 【问题描述】:

我有一个 Symfony 4 项目,我需要使用 LexikJWTAuthenticationBundle 执行安全身份验证。

我按照它的文档实现了捆绑包,当我执行以下命令时出现此错误:curl -X POST -H "Content-Type: application/json" http://localhost:8000/api/login_check -d '"username":"johndoe","password":"test"'

错误信息:

无效的 JSON

此错误的类型为 Bad Request (400),它发生在文件中的 json_decode 时:

Symfony\Component\Security\Http\Firewall\UsernamePasswordJsonAuthenticationListener

security.yaml:

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

encoders:
    App\Entity\User: bcrypt

role_hierarchy:
    ROLE_VIP:  ROLE_USER
    ROLE_ADMIN:       [ROLE_USER, ROLE_VIP ]
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_VIP, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

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
        stateless: true
        guard:
            authenticators:
                - lexik_jwt_authentication.jwt_token_authenticator


    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    main:
        pattern: ^/
        anonymous: true
        form_login:
            username_parameter: "login_form[email]"
            password_parameter: "login_form[password]"
            login_path: site_accueil
            check_path: site_accueil
            default_target_path: site_espace_vip_index
            remember_me: false
            success_handler: redirect.after.login
        logout:
            path: /deconnexion
            target: /
        guard:
            authenticators:
                - App\Security\LoginFormAuthenticator
access_control:
-  path: ^/connexion-vip, roles: IS_AUTHENTICATED_ANONYMOUSLY 
-  path: ^/interface, roles: [ROLE_ADMIN] 
-  path: ^/profile, roles: [ROLE_VIP, ROLE_ADMIN] 
-  path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY 
-  path: ^/resetting, roles: IS_AUTHENTICATED_ANONYMOUSLY 
-  path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY 
-  path: ^/api,       roles: IS_AUTHENTICATED_FULLY 

routes.yaml:

api_login_check:
    path: /api/login_check

lexik_jwt_authentication.yaml:

lexik_jwt_authentication:
secret_key: '%env(resolve:JWT_SECRET_KEY)%'
public_key: '%env(resolve:JWT_PUBLIC_KEY)%'
pass_phrase: '%env(JWT_PASSPHRASE)%'
token_ttl: 3600

已生成 SSH 密钥。

请问有什么问题?

【问题讨论】:

Apache 用户注意事项github.com/lexik/LexikJWTAuthenticationBundle/blob/master/… 是的,我读过这个,我在公用文件夹的 .htaccess 文件中添加了这一行:SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 但它没有任何改变。 【参考方案1】:

问题已解决:curl -X POST -H "Content-Type: application/json" http://localhost:8000/api/login_check -d "\"username\":\"johndoe\",\"password\":\"test\""

【讨论】:

以上是关于使用 LexikJWTAuthenticationBundle 时 JSON 消息无效的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份