FOSOAuthServerBundle с использованием поставщика сущностей Symfony 4

Я установил fosOauthServerBundle с настраиваемым поставщиком аутентификации (избегая FosUserBundle).

Кажется, что конфигурация моего сервиса неточна, поэтому пакет не может найти провайдера пользователя:

Вызов функции-члена loadUserByUsername() для null

со ссылкой на :vendor\friendsofsymfony\oauth-server-bundle\Storage\OAuthStorage.php (строка 162)

try {
       $user = $this->userProvider->loadUserByUsername($username);
    } catch (AuthenticationException $e) { 
       return false; 
   }

Надеюсь, в сообщении уже обрабатываются ошибки такого рода, но оно не предлагает явного решения:

предыдущая тема, та же проблема

Я использую поставщика сущностей, как в документации, который отлично работает, используя все, кроме предоставления пароля с использованием fosoauth (разочаровывает): ссылка на провайдера пользователя

На самом деле я попробовал пару способов написать это в службе конфигурации, но не смог заставить его работать. Может ли кто-нибудь предложить мне решение?

Я пробовал app_user_provider.email или app_user_provider.username, но это тоже не работает.

security:
encoders:
  App\Entity\User:
    algorithm: bcrypt
    #FOS\UserBundle\Model\UserInterface: bcrypt

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER, ROLE_ESTABLISHMENT
    ROLE_SUPER_ADMIN: ROLE_ADMIN

providers:
    app_user_provider:
        entity:
            class: App\Entity\User
            property: email

firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false

    oauth_token:
        pattern: ^/oauth/v2/token
        security: false

    # Add this firewall only in the Authorization code flow
    oauth_authorize:
        pattern: ^/oauth/v2/auth
        form_login:
            provider: app_user_provider
            check_path: /oauth/v2/auth_login_check
            login_path: /oauth/v2/auth_login
        anonymous: true

    api_doc:
        pattern: ^/api/doc
        fos_oauth: false
        stateless: true
        anonymous: true

    api:
        pattern: ^/api
        fos_oauth: true
        stateless: true
        anonymous: false

    main:
        pattern: ^/
        form_login:
            provider: app_user_provider
            csrf_token_generator: security.csrf.token_manager
        #logout: true
        guard:
            authenticators:
                - App\Security\LoginFormAuthenticator
        remember_me:
            secret:   '%kernel.secret%'
            lifetime: 604800 # 1 week in seconds
            path:     /
            always_remember_me: true
        logout:
            path: app_logout
            target: app_login
        fos_oauth: false
        anonymous: true

access_control:
    - { path: ^/oauth/v2/auth_login$, role: IS_AUTHENTICATED_ANONYMOUSLY } # Add this only in the Authorization code flow
    - { path: ^/api/doc, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/api, roles: IS_AUTHENTICATED_FULLY }
    - { path: ^/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/establishment, role: IS_AUTHENTICATED_ANONYMOUSLY }

fos_oauth_server:
db_driver:           orm
client_class:        App\Entity\Client
access_token_class:  App\Entity\AccessToken
refresh_token_class: App\Entity\RefreshToken
auth_code_class:     App\Entity\AuthCode
service:
    #user_provider: fos_user.user_provider.username
    user_provider: app_user_provider

Это спасло бы мой день, спасибо!


person El mago    schedule 12.05.2020    source источник


Ответы (1)


Хорошо, мне просто нужно создать пользовательского провайдера. Он не может работать с сущностью.

https://symfony.com/doc/current/security/user_provider.html#creating-a-custom-user-provider

person El mago    schedule 19.05.2020