Symfony 4 + HWIOAuthBundle: нет пользователя провайдера при выходе - PullRequest
0 голосов
/ 26 июня 2018

Я застрял, пытаясь реализовать управление пользователями в проекте Symfony4 с помощью этого пакета и Auth0. В настоящее время у меня есть пара проблем: одна из них заключается в том, что при выходе из системы меня приветствуют: Нет пользователя для пользователя "HWI \ Bundle \ OAuthBundle \ Security \ Core \ User \ OAuthUser" . Это при использовании пути / auth0 / logout . Дело в том, что у меня есть класс User, который расширяет класс OAuthUser, и я подумал, что этого будет достаточно. Это не? (У меня также есть HWI OAuthUserProvider по умолчанию в файле services.yaml, но это потому, что его отключение или включение там, похоже, ничего не меняет.)

Я очень, очень запутался в том, как настраивать провайдеров пользователей, а документация сбивала с толку (я использовал файл, владелец ресурса, из учебника, пока мой старший разработчик не показал мне, что рекомендуемый файл в например, реальное репо было совсем другим.) Итак, вот что у меня есть:

services.yaml

# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
    locale: 'en'

services:
    # default configuration for services in *this* file
    _defaults:
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
        public: false       # Allows optimizing the container by removing unused services; this also means
                            # fetching services directly from the container via $container->get() won't work.
                            # The best practice is to be explicit about your dependencies anyway.

    hwi_oauth.user.provider.entity:
        class: HWI\Bundle\OAuthBundle\Security\Core\User\OAuthUserProvider

    my.oauth_user_provider:
        class: App\Providers\OAuthProvider
        autowire: false
        arguments: 
            - '@session'
            - '@doctrine'
            - '@service_container'

    # makes classes in src/ available to be used as services
    # this creates a service per class whose id is the fully-qualified class name
    App\:
        resource: '../src/*'
        exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'

    # controllers are imported separately to make sure services can be injected
    # as action arguments even if you don't extend any base controller class
    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']

    App\EventListener\:
        resource: '../src/EventListener'

    # App\EventListener\UserEventListener:
        # tags: 
            # - { name: 'kernel.event_listener', event: 'hwi_oauth.connect.completed' }

    # add more service definitions when explicit configuration is needed
    # please note that last definitions always *replace* previous ones

security.yaml

security:
    # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
    providers:
        # in_memory: { memory: ~ }
        # user_provider:
           # entity:
              #  class: App\Entity\User
              #  property: email
        my_provider: 
            id: my.oauth_user_provider

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        # main:
           # pattern:    ^/
           #  anonymous: ~
           # http_basic: ~
            # provider: user_provider
            # form_login:
                # login_path: login
                # check_path: login
        secured_area:
            pattern: ^/
            anonymous: ~
            oauth:
                resource_owners:
                    auth0: "/auth0/callback"
                login_path:        /login
                use_forward:       false
                failure_path:      /login
                oauth_user_provider:
                    service: my.oauth_user_provider

            logout:
                path:   /auth0/logout
                target: /
        main:
            anonymous: ~
    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/secured, roles: ROLE_OAUTH_USER }

    role_hierarchy:
        ROLE_ADMIN:     ROLE_USER
        ROLE_DEVELOPER: ROLE_ADMIN


    encoders:
        App\Entity\User: bcrypt

hwi_oauth.yaml

hwi_oauth:
    firewall_names: [secured_area]
    resource_owners:
        auth0:
            type:                oauth2
            class:               'App\Auth0ResourceOwner'
            client_id:           "%env(AUTH0_CLIENT_ID)%"
            client_secret:       "%env(AUTH0_CLIENT_SECRET)%"
            base_url:            "https://%env(AUTH0_DOMAIN)%"
            scope: "openid email profile"
            paths:
                identifier: sub
                firstname: given_name
                middlename: middle_name
                lastname: family_name
                email_verified: email_verified
                dob: birthdate
                identities: https://www.example.org/identities

Я действительно озадачен тем, что здесь происходит. Что мне не хватает? И если это в документации, кто-то может указать мне на конкретный момент, решение описано? Я рассмотрел несколько вопросов здесь о переполнении стека, но они либо говорят о Symfony 2, который я не использую, либо у них есть ответы, которые не применяются, например, добавление «hwi_oauth.user.provider» в разделе провайдеров в security.yaml , но если я это сделаю, у меня возникнет проблема с наличием слишком большого числа поставщиков. (И если я пытаюсь явно указать провайдера, сказав, что он говорит «провайдер» вместо «oauth_user_provider», это приведет меня к провалу в том, что дочерние узлы не настроены, и в своих поисках я не нашел ничего, что могло бы объяснить только то, что означает сообщение об ошибке.) Я нахожусь в точке, где я рву те маленькие волосы, которые я оставил. Что мне не хватает? Какую часть документации я не прочитал или неправильно прочитал? Я не уверен, куда обратиться дальше.

1 Ответ

0 голосов
/ 28 июня 2018

Итак, как оказалось, хотя у меня был класс User, расширяющий класс OAuthUser, и мой пользовательский провайдер, расширяющий пользовательский провайдер HWI, мой пользовательский провайдер вызывал функцию (loadUserByUsername), которая была только по умолчанию, поэтому я имел просто написать свой собственный в моем собственном поставщике, чтобы переопределить это. Это решило одну проблему, но теперь я должен выяснить, почему мой пользователь, когда я вхожу в систему, имеет значение NULL. Но это отдельная проблема, я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...