Я следую рецептам книги и кулинарной книги Symfony, и я встретил проблему с простой формой входа - независимо от того, введен ли логин/пароль, появляется сообщение - «Недействительные учетные данные». Пользователи загружаются через Doctrine (пользовательский класс, который реализует UserInterface). Исходные коды: ФайлФорма входа в систему - Symfony 2.7
Безопасность:
providers:
user_provider:
entity:
class: BakaMainBundle:User
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
default:
anonymous: ~
http_basic: ~
provider: user_provider
form_login:
login_path: /login
check_path: /login_check
target_path_parameter: /index/welcome
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
encoders:
Baka\MainBundle\Entity\User:
algorithm: bcrypt
cost: 12
Контроллер:
class SecurityController extends Controller
{
/**
* @Route("/login", name="login_route")
*/
public function loginAction()
{
$authUtils = $this->get('security.authentication_utils');
$error = $authUtils->getLastAuthenticationError();
$enteredUsername = $authUtils->getLastUsername();
return $this->render('BakaMainBundle::Login.html.twig',
array
(
'last_username' => $enteredUsername,
'error' => $error,
'site' => 'login'
));
}
/**
* @Route("/login_check", name="login_check")
*/
public function loginCheckAction()
{
}
}
хранилище пользователя:
class UserRepository extends \Doctrine\ORM\EntityRepository implements UserProviderInterface
{
public function loadUserByUsername($username)
{
$user = $this->createQueryBuilder('u')
->where('u.username = :username OR u.email = :email')
->setParameter('username', $username)
->setParameter('email', $username)
->getQuery()
->getOneOrNullResult();
if ($user === null)
{
$returnMessage = sprintf(
'%s - such username of email adress does not exist in database! Try again with other login data.',
$username);
throw new UnsupportedUserException($returnMessage);
}
return $user;
}
public function refreshUser(UserInterface $user)
{
$userClass = get_class($user);
if (!$this->supportsClass($userClass))
{
throw new UnsupportedUserException
(sprintf('Ops! Something goes wrong. Your user class is not supported by security system.'));
}
return $this->find($user->getId());
}
public function supportsClass($userclass)
{
return $this->getEntityName() === $userclass || is_subclass_of($userclass, $this->getEntityName());
}
И форма HTML тег:
<form action="{{ path('login_check') }}" method="post">
Любые предложения? Буду признателен за решение моей проблемы.
Я хотел бы добавить, что Symfony на самом деле даже не ссылается на мой метод UserRepository: loadUserByUsername ($ username) и запрос к БД. Это, наверное, главная проблема. – baka1408