gpt4 book ai didi

symfony - 如何使用 JWT 修复 "The key _username must be a string"错误

转载 作者:行者123 更新时间:2023-12-05 06:24:11 25 4
gpt4 key购买 nike

我有一个带有标准连接的网站,我想通过 API 部分添加一种新的连接方式。

我已经关注了这个文档: 1 https://github.com/lexik/LexikJWTAuthenticationBundle/blob/master/Resources/doc/index.md#getting-started

所以我将 JWT 包添加到我的 Symfony 3 项目中,并更改了我的 security.yml :

# app/config/security.yml

security:
encoders:
Symfony\Component\Security\Core\User\User: sha512
GS\UserBundle\Entity\User: sha512 #sha512

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

providers:
main:
entity:
class: GS\UserBundle\Entity\User
property: login

firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
anonymous: true
provider: main
stateless: true
form_login:
login_path: login
check_path: login_check
default_target_path: preLogin
logout:
path: logout
target: preLogin
remember_me:
secret: '%secret%' # se souvenir de moi
lifetime: 1000
always_remember_me: true
login:
pattern: ^/api/login
stateless: true
anonymous: true
provider: main
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
access_control:
- { path: /admin, roles: ROLE_ADMIN }
- { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api, roles: IS_AUTHENTICATED_FULLY }

我已经像这样配置了我的 config.yml :

lexik_jwt_authentication:
secret_key: '%kernel.project_dir%/config/jwt/private.pem'
public_key: '%kernel.project_dir%/config/jwt/public.pem'
user_identity_field: login
pass_phrase: 'MY PASSWORD'
token_ttl: 3600

当我试图通过这样的 postman 获取我的 token 时: postman

我有这个错误:

The key "_username" must be a string, "NULL" given.

因此,我尝试在 security.yml 中添加“user_parameter”,以便为我的用户实体提供参数名称,如下所示:

 login:
pattern: ^/api/login
stateless: true
anonymous: true

json_login:
check_path: /api/login_check
username_parameter: login
password_parameter: mdp
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure

现在 postman 什么都不回答了。

编辑:

我找到了一个命令来检查我的配置文件,我得到了这个答案:

commande

如果我删除 username_parameter 和 password_parameter,commande check 告诉我配置没问题,但我和 postman 有同样的错误:

The key "username" must be a string, "NULL" given.

请帮帮我,我找不到任何解决方案...

最佳答案

Lexik JWT 身份验证配置需要 security.yaml 中的 provider key 。

login:
pattern: ^/api/login
stateless: true
anonymous: true
provider: YOUR_PRODIVER_NAME #in your case it's main
json_login:
check_path: /api/login_check
username_parameter: login
password_parameter: mdp
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure

然后为了能够验证用户信息,它需要知道身份字段是什么字段。所以在 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)%'
user_identity_field: YOUR_USER_FIELD # example email
token_ttl: 7200

关于请求参数,usernamepassword是必须要传的(No _)

enter image description here

关于symfony - 如何使用 JWT 修复 "The key _username must be a string"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57818988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com