Я сейчас перехожу из WordPress на веб-сайт Symfony2.
Я импортировал весь мой пользователь WP на Symfony2, но теперь я ищу способ сделать дополнительные проверки, когда пользователь пытается войти в систему (обычно проверяют, был ли пользователь импортирован из WP и проверен его старый пароль).
Какой лучший способ добавить некоторые проверки на аутентификацию пользователя? (login_check на fosuserbundle).
Я просто пытаюсь переопределить SecurityController, но он не работает, так как вход не создается.
Спасибо за вашу помощь.
Изменить: мне нужно добавить мой чек во время процесса входа, а не после. Во время входа в систему, если пользователь приходит из WordPress, я хочу проверить, является ли пароль, который он предоставляет, таким же, как и его старый пароль WordPress (который также хранится в БД).
Я наконец нашел решение, но не уверен, что это лучший способ сделать это.
Я добавил слушателя, когда логин завершился неудачно и проверьте, является ли он пользователем из WordPress.
Теперь я ищу решение для обработки флажка "запомнить меня", потому что пользователь выполняет аутентификацию программно. Вот код:
public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
$username = $request->request->get('_username');
$password = $request->request->get('_password');
$user = $this->doctrine->getRepository('AppBundle:User')->findOneByUsername($username);
if ($user instanceof User && $user->getFromWordpress() == true) {
//The class use by WordPress to check / encode passwords
$hasher = new PasswordHash(8, TRUE);
//User provide the right password
if ($hasher->CheckPassword($password, $user->getWordpressPassword())){
//Programmatically authenticate the user
$token = new UsernamePasswordToken($user, $user->getPassword(), "main", $user->getRoles());
$this->tokenStorage->setToken($token);
$event = new InteractiveLoginEvent($request, $token);
$this->eventDispacher->dispatch("security.interactive_login", $event);
//Set the password with the Symfony2 encoder
$encoder = $this->encoderFactory->getEncoder($user);
$password = $encoder->encodePassword($password, $user->getSalt());
$user->setPassword($password);
$user->setFromWordpress(false);
$this->doctrine->getManager()->persist($user);
$this->doctrine->getManager()->flush();
//Finnaly send login ok response
return $this->onAuthenticationSuccess($request, $token);
}
}
//Login failed code ...
//.....
}