Изменить пароль безопасности Symfony — не FOS

Я использую стандартную защиту Symfony для моего пароля администратора:

security:
providers:
in_memory:
memory:
users:
admin:
password: $2y$12$.QD1HlEVmeupiIIM3d601urQxd.WsgJyfZ0nJjVAyEn2qQOGpjIHi
roles: 'ROLE_ADMIN'
encoders:
Symfony\Component\Security\Core\User\User:
algorithm: bcrypt
cost: 12

Теперь я хотел бы реализовать метод для изменения пароля.
С некоторыми ухищрениями мне удалось получить ответ от этот вопрос к работе по проверке пароля.

Это мой класс паролей:
Я был вынужден использовать public типа на данный момент, потому что я продолжал получать Не удалось определить тип доступа для свойства ошибка. Дополнительный вопрос, с чего бы это случилось? У меня были сеттеры и геттеры без комментариев

<?php
namespace AppBundle\Security;

use Symfony\Component\Security\Core\Validator\Constraints as SecurityAssert;
use Symfony\Component\Validator\Constraints as Assert;

class ChangePassword
{
/**
* @SecurityAssert\UserPassword(
*     message = "Niepoprawne Haslo"* )
*/
public $oldPassword;

/**
* @Assert\Length(
*     min = 6,
*     minMessage = "Hasło powinno mieć min. 6 znaków"* )
*/
public $newPassword;

// /**
//  * Get oldPassword
//  *
//  * @return string
//  */
// public function getOldPassword()
// {
//  return $this->oldPassword;
// }

// *
//  * Get newPassword
//  *
//  * @return string

// public function getNewPassword()
// {
//  return $this->newPassword;
// }

// public function setNewPassword($newPassword)
// {
//  $this->newPassword = $newPassword;

//  return $this;
// }

}

Мой тип:

<?php
namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use AppBundle\Security\ChangePassword;class ChangePasswordType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{

$builder->add('oldPassword', PasswordType::class, array(
'label' => 'Stare Hasło'))
->add('newPassword', RepeatedType::class, array(
'type' => PasswordType::class,
'invalid_message' => 'Hasła nie pasują do siebie',
'required' => true,
'first_options'  => array('label' => 'Nowe Hasło'),
'second_options' => array('label' => 'Wprowadź ponownie'),
))
->add('save', SubmitType::class, array(
'label' => 'Zmień Hasło',
'attr' => array(
'class' => 'btn btn-danger'
)));
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Security\ChangePassword',
));
}

public function getName()
{
return 'change_passwd';
}
}

И, наконец, контроллер:

public function adminChangePasswdAction(Request $request)
{
$changePasswordModel = new ChangePassword();
$form = $this->createForm(ChangePasswordType::class, $changePasswordModel);

$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {

$data = $form->getData();

$user = $this->getUser();

$plainPassword = $form->getData()->newPassword;
$encoder = $this->container->get('security.password_encoder');
$encoded = $encoder->encodePassword($user, $plainPassword);

$user->setPassword($encoded);

//return $this->redirect($this->generateUrl('admin-panel'));
}

return $this->render('admin/changepasswd.html.twig', array(
'form' => $form->createView(),
));
}

Но, как вы можете легко догадаться $user->setPassword($encoded); часть не работает, потому что пользовательский класс не имеет метода setPassword.

Как правильно установить пароль? Это вообще возможно?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector