我正在尝试用Symfony5创建带有JWT身份验证的REST API。首先,我试着按照这里写的那样做,https://h-benkachoud.medium.com/symfony-rest-api-without-fosrestbundle-using-jwt-authentication-part-2-be394d0924dd。当我尝试使方法成为getTokenUser时,出现了一些困难:
/**
* @param JWTTokenManagerInterface $JWTManager
* @return JsonResponse
* @Route("/api/login_check", name="api_login_check", methods={"POST"})
*/
public function getTokenUser(UserInterface $user,JWTTokenManagerInterface $JWTManager)
{
return new JsonResponse(['token' => $JWTManager->create($user)]);
}Symfony说UserInterface不是服务,所以它不能自动连接它。好的,那么我已经试着找到关于这个问题的其他文章了。但令人惊讶的是,他们并没有说明如何编写这个方法。例如,如果在security.yaml和routes.yaml中配置路由/api/login_check,则此处的https://digitalfortress.tech/php/jwt-authentication-with-symfony/看起来就像是它必须自动工作。但是不,它不起作用。
那么我必须如何编写控制器呢?
我的security.yaml是:
security:
encoders:
App\Entity\User:
algorithm: bcrypt
# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
providers:
app_user_provider:
entity:
class: App\Entity\User
property: email
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
provider: app_user_provider
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: true
# activate different ways to authenticate
# https://symfony.com/doc/current/security.html#firewalls-authentication
# https://symfony.com/doc/current/security/impersonating_user.html
# switch_user: true
# Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
- { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api, roles: IS_AUTHENTICATED_FULLY }发布于 2021-05-06 17:40:21
你确实不需要这个方法。您应该参考您正在使用的包的文档:https://github.com/lexik/LexikJWTAuthenticationBundle/blob/master/Resources/doc/index.md
实际上,登录URL是由Symfony的安全组件处理的,并依赖于您在json_login键:)下设置的配置。
文档(section "Usage")中再次详细介绍了这一点。
https://stackoverflow.com/questions/67408512
复制相似问题