api平台中基于会话的身份验证

时间:2019-11-27 15:51:29

标签: symfony4 api-platform.com

我试图设置基于会话的身份验证,而不是当前使用的JWT,因为我不想将JWT令牌存储在本地存储中。

我已成功使用本指南https://symfony.com/doc/current/security/json_login_setup.html对自己进行身份验证,并获得了有关用户的响应数据。

但是对任何端点的进一步请求都会使我未经授权401。

这是我的安全Yaml

security:
encoders:
    App\Entity\User:
        algorithm: bcrypt
providers:
    app_user_provider:
        entity:
            class: App\Entity\User
            property: email
firewalls:
    dev:
        pattern: ^/_(profiler|wdt)
        security: false
    api:
        pattern: ^/api/
        stateless: true
        anonymous: true
        provider: app_user_provider
        json_login:
            check_path: /api/login
            username_path: email
            password_path: password
            #success_handler: lexik_jwt_authentication.handler.authentication_success
            #failure_handler: lexik_jwt_authentication.handler.authentication_failure

        #guard:
        #   authenticators:
        #      - lexik_jwt_authentication.jwt_token_authenticator
    main:
        anonymous: true
access_control:
    - { path: ^/api/authentication_token,   roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/api/graphql,                roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/api/form/,                  roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/api/,                       roles: IS_AUTHENTICATED_FULLY }
    - { path: ^/,                           roles: IS_AUTHENTICATED_ANONYMOUSLY }

在正式的api平台文档中,没有使用基于会话的登录的消息,我觉得很奇怪。

谢谢

1 个答案:

答案 0 :(得分:0)

您需要删除stateless: true或将其更改为stateless: false

  

stateless配置参数可防止Symfony尝试执行以下操作:   将身份验证信息存储在会话中

对我来说,其他所有东西看起来都很不错,但是,如果这不能解决您的问题,您是否可以将随401响应代码返回的任何消息添加到您的任务中?