Что за ошибка при реализации аутентификации через логин и email на Symfony3? Изучаю symfony3
Пытаюсь реализовать symfony.com/doc/current/security/entity_provider.h...
Но при попытки входа в приложение получаю - The Doctrine repository "Doctrine\ORM\EntityRepository" must implement Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface. createQueryBuilder('u')
->where('u.username = :username OR u.email = :email')
->setParameter('username', $username)
->setParameter('email', $username)
->getQuery()
->getOneOrNullResult();
}
}//zenaku/AppBundle/Entity/Users.php
namespace zenaku\AppBundle\Entity;
use Doctrine\ORM\Mapping AS ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
/**
* Users
*
* @ORM\Entity(repositoryClass="zenaku\AppBundle\Entity\Repository\UsersRepository")
* @ORM\Table(name="users", uniqueConstraints={@ORM\UniqueConstraint(name="username_UNIQUE", columns={"username"}), @ORM\UniqueConstraint(name="id_UNIQUE", columns={"id"}), @ORM\UniqueConstraint(name="email_UNIQUE", columns={"email"})}, indexes={@ORM\Index(name="fk_users_privileges_idx", columns={"privileges"})})
* @ORM\Entity
*/
class Users implements UserInterface, AdvancedUserInterface, \Serializable
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="username", type="string", length=16, nullable=false)
*/
private $username;
//...
}security:
encoders:
zenaku\AppBundle\Entity\Users:
algorithm: bcrypt
encode_as_base64: true
cost: 15
providers:
db_hal:
entity:
class: zenakuAppBundle:Users
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
login_path: login
check_path: check_login
username_parameter: username
password_parameter: password
provider: db_hal
logout: ~
anonymous: ~
switch_user: { role: ROLE_UBERADMIN, parameter: _i_other_user}
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_UBERADMIN: ROLE_ADMIN
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY}
- { path: ^/admin, roles: ROLE_ADMIN}
- { path: ^/, roles: ROLE_USER}
В интернете пишут что-то о несовместимости конфигураций в аннотациях/yml/xml. Хотя я использую лишь аннотации. Вот к примеру

21 Авг 2019 в 07:04
183 +1
1
Ответы
1

Ошибка возникает из-за того, что вы указали, что ваш репозиторий UsersRepository реализует интерфейс UserLoaderInterface, но сам интерфейс не был имплементирован в вашем репозитории.

Чтобы исправить эту ошибку, вам нужно добавить метод loadUserByUsername в ваш класс UsersRepository, который будет загружать пользователя по имени пользователя или по email.

Примерно так:

class UsersRepository extends EntityRepository implements UserLoaderInterface
{
public function loadUserByUsername($username)
{
return $this->createQueryBuilder('u')
->where('u.username = :username OR u.email = :email')
->setParameter('username', $username)
->setParameter('email', $username)
->getQuery()
->getOneOrNullResult();
}
}

После этого ошибка должна исчезнуть, и вы сможете успешно аутентифицироваться через логин и email.

20 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 157 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир