首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Symfony5中创建JWT令牌?

如何在Symfony5中创建JWT令牌?
EN

Stack Overflow用户
提问于 2021-05-06 04:44:11
回答 1查看 3.3K关注 0票数 1

我正在尝试用Symfony5创建带有JWT身份验证的REST API。首先,我试着按照这里写的那样做,https://h-benkachoud.medium.com/symfony-rest-api-without-fosrestbundle-using-jwt-authentication-part-2-be394d0924dd。当我尝试使方法成为getTokenUser时,出现了一些困难:

代码语言:javascript
复制
    /**
     * @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.yamlroutes.yaml中配置路由/api/login_check,则此处的https://digitalfortress.tech/php/jwt-authentication-with-symfony/看起来就像是它必须自动工作。但是不,它不起作用。

那么我必须如何编写控制器呢?

我的security.yaml是:

代码语言:javascript
复制
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 }
EN

回答 1

Stack Overflow用户

发布于 2021-05-06 17:40:21

你确实不需要这个方法。您应该参考您正在使用的包的文档:https://github.com/lexik/LexikJWTAuthenticationBundle/blob/master/Resources/doc/index.md

实际上,登录URL是由Symfony的安全组件处理的,并依赖于您在json_login键:)下设置的配置。

文档(section "Usage")中再次详细介绍了这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67408512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档