Изменить пароль с помощью пользовательского контроллера - FOSUserBundle (без FormBuilder)

Я реализую свою собственную страницу настроек профиля. Это позволит пользователю изменить свое имя, адрес электронной почты, пароль и т. Д.

Я понимаю, что FOSUserBundle имеет предварительно встроенный / profile / edit и /profile/change-password. Я хотел бы использовать ту же функциональность здесь, за исключением моих собственных веточек. Я не использую FormBuilder.

Это мой контроллер для изменения пользовательских настроек.

public function applySettings(Request $request)
{ 
    $user = $this->getUser();

    $dm = $this->get('doctrine_mongodb')->getManager();
    $repository = $dm->getRepository('AppBundle:User');

    $name = $request->get('_username');
    $email = $request->get('_email');
    $password = $request->get('_password');
    $confirm = $request->get('_confirm');

    if ($name != null) {
        if ($name == ($repository->findOneBy(array('username' => $name )))) { 
            throw $this->createNotFoundException('Username already in use');
        } else { 
            // username changed
            $user->setUsername($name); 
        }         
    }

    if ($email != null) {
        if ($email == ($repository->findOneBy(array('email' => $email )))) { 
            throw $this->createNotFoundException('Email already in use');
        } else { 
            // email changed
            $user->setEmail($email);    
        }      
    }

    if (strcmp($password, $confirm) == 0) {
        // password = confirm here
        // change password functionality done here
    } else {
        throw $this->createNotFoundException(
            'Passwords do not match '
        );
    }

    $dm->flush();
    return $this->redirectToRoute('settings');
}

Есть ли способ, как я могу сделать проверку пароля в моем собственном контроллере, солить и сохранить пароль, если он действителен?

Также есть ли способ применить те же методы проверки, которые существуют в / register / и / profile / change-password, где появляется предупреждение, если пароли не совпадают перед отправкой?

Любая помощь будет принята с благодарностью.

Я использую Symfony 2.6.1 и последнюю версию FOSUserBundle.

1 ответ

Решение

Это функция, которую я использовал. Работает, но не выполняет проверку в реальном времени.

    if (strcmp($password, $confirm) == 0) {
        $encoder_service = $this->get('security.encoder_factory');
        $encoder = $encoder_service->getEncoder($user);

        $newpass = $encoder->encodePassword($password, $user->getSalt());
        $user->setPassword($newpass);
    } else {
        throw $this->createNotFoundException(
            'Passwords do not match '
        );
    }
Другие вопросы по тегам