Переопределите контроллер входа в FOSUserBundle (Symfony2)

1

Я сейчас перехожу из WordPress на веб-сайт Symfony2.

Я импортировал весь мой пользователь WP на Symfony2, но теперь я ищу способ сделать дополнительные проверки, когда пользователь пытается войти в систему (обычно проверяют, был ли пользователь импортирован из WP и проверен его старый пароль).

Какой лучший способ добавить некоторые проверки на аутентификацию пользователя? (login_check на fosuserbundle).

Я просто пытаюсь переопределить SecurityController, но он не работает, так как вход не создается.

Спасибо за вашу помощь.

Изменить: мне нужно добавить мой чек во время процесса входа, а не после. Во время входа в систему, если пользователь приходит из WordPress, я хочу проверить, является ли пароль, который он предоставляет, таким же, как и его старый пароль WordPress (который также хранится в БД).

  • 0
    Найдите: class AuthenticationSuccessListener {/ ** * @param AuthenticationSuccessEvent $ event * / public function onAuthenticationSuccessResponse (AuthenticationSuccessEvent $ event)
  • 0
    или даже лучше проверить: webtipblog.com/create-authentication-listener-symfony-2
Показать ещё 4 комментария
Теги:
fosuserbundle

1 ответ

2

Я наконец нашел решение, но не уверен, что это лучший способ сделать это.

Я добавил слушателя, когда логин завершился неудачно и проверьте, является ли он пользователем из 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 ...
    //.....
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню