Для пользователя "Symfony \ Component \ Security \ Core \ User \ User" нет поставщика - PullRequest
7 голосов
/ 05 июля 2011

Поработав весь день с простыми задачами для Symfony 2, но безуспешно, я решил попросить вас, ребята, найти решение.

Вот проблема: я хотел бы сделать аутентификацию http_basic с использованием доктрины,таким образом, пользователям будет предложено ввести имя пользователя / пароль, которые хранятся в базе данных.

Итак, я выполнил следующие действия:

1) Создал новую сущность с именем Пользователь с генератором интерактивной консоли.

Вот как это выглядит:

http://pastebin.com/3RzrwFzL

2) Как указано в документации, я реализовал UserInterface и добавил 4 отсутствующих метода.Теперь сущность выглядит так:

http://pastebin.com/Epw3YrwR

3) Я изменил security.yml как можно меньше, чтобы он работал, и выглядит это так:

http://pastebin.com/tp6Gd7t7

Я очистил кеш и попытался получить доступ к app_dev.php / admin и, конечно же, весь день получаю одну и ту же ошибку:

Не существует провайдера пользователя дляпользователь "Symfony \ Component \ Security \ Core \ User \ User".

500 Внутренняя ошибка сервера - RuntimeException

Может кто-нибудь сказать мне, где проблема?Я пробовал эту тысячу разных способов, и странно, что на мгновение это сработало, но когда я попытался добавить sha1 в качестве алгоритма кодировщика вместо открытого текста и очистил кеш, я вернулся к той же ошибке ... с тех пор я не получаю ничего, кромеЭто.Это похоже на наличие скрытого кэша, который стирается всякий раз, когда Symfony принимает решение: D

Я думаю, что ошибка также может быть в 4 методах объекта, но я не могу их исправить, так как нет документации очто они должны делать.

Я сейчас использую RC4.

Заранее спасибо, надеюсь, кто-то поможет.

Ответы [ 4 ]

8 голосов
/ 31 июля 2012

Однажды у меня была эта проблема.

Это потому, что я вошел в систему с пользователем из предыдущего провайдера (in_memory). Пришлось восстановить часть in_memory, выйти из системы и затем поставить нового провайдера.

Мое предположение:

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

4 голосов
/ 07 июля 2011

Была такая же проблема. Кажется, это работает. Я буду использовать его только в процессе разработки, позже найду решение.!

security:
    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]


    providers:
        chain_provider:
            providers: [in_memory, user_db]
        in_memory:
            users:
                cheese: { password: olo, roles: ROLE_ADMIN }
        user_db:
            entity: { class: Abc\BaseBundle\Entity\User, property: username }


    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
        Abc\BaseBundle\Entity\User: plaintext

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

        panel:
            pattern:    ^/(panel|login_check)
            anonymous: ~
            form_login:
                login_path:  /login
                check_path:  /login_check
                default_target_path: /panel/
            logout:
                path:   /logout
                target: /
0 голосов
/ 21 февраля 2015

для меня проблема произошла в среде разработчика. Это произошло потому, что у меня активная сессия из другого проекта.

Помогла очистка куки браузера.

0 голосов
/ 07 июля 2011

Вы можете избавить себя от головной боли и попробовать друзей Symfony UserBundle .

По крайней мере, просмотр этого пакета поможет вам изучить и исправить свой собственный код. В нем много хорошо написанного кода / примеров.

...