Изменить пароль с помощью пользовательского контроллера - 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 '
);
}