使用 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有三种方式(不使用,动态使用,静态使用,默认是动态使用)