2016-11-18 2 views
0

Huston, у меня есть проблема :)Подтвердить старый пароль в Symfony 2 form

Мне нужно проверить старый пароль.

У Symfony встроенный модуль проверки паролей, это замечательно, но ... Мне нужно перенастроить систему кодирования.

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

/** 
* User 
*/ 
class User implements AdvancedUserInterface, \Serializable 
{ 

    /** 
    * @SecurityAssert\UserPassword() 
    */ 
    protected $oldPassword; 

Это возвращение всегда неверно, поскольку пароль зашифрован с помощью mcrypt.

Я попытался изменить этот класс

class UserPasswordValidator extends ConstraintValidator 
{ 
    private $tokenStorage; 
    private $encoderFactory; 

    public function __construct(TokenStorageInterface $tokenStorage, EncoderFactoryInterface $encoderFactory) 
    { 
     $this->tokenStorage = $tokenStorage; 
     $this->encoderFactory = $encoderFactory; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function validate($password, Constraint $constraint) 
    { 
     $user = $this->tokenStorage->getToken()->getUser(); 

     $encoder = new CryptPasswordEncoder(); 

     $oldPass = $user->getPassword(); 

     if ($encoder->isPasswordValid($oldPass, $password, '')) { 
      $this->context->buildViolation($constraint->message) 
       ->setParameter('%string%', $password) 
       ->addViolation(); 
     } 
    } 

} 

Но когда я Представлять подтверждено значение $ пароль всегда нулевой

ответ

0

Я был сделать некоторые прогулку вокруг.

Я ищу старый пароль в контроллере и проверяю с помощью кодировщика, если пароль действителен. если это не я делаю ошибку с flashBag сообщением выше form_widget

public function editProfileAction(Request $request) { 
     $user = $this->getUser(); 
     $oldPassword = $user->getPassword(); 

Я должен был хранить старый пароль в переменном до проверки формы, поскольку он отменяется после проверяющей формы.

 $section = $request->get('section'); 

     if ($section == 'password-change') { 
      $formType = EditPasswordFormType::class; 
      $form = $this->createForm($formType, $user); 

      $data['form'] = $form->createView(); 
     } 


     if ($request->isMethod('POST')) { 
      $form->handleRequest($request); 
      if ($form->isValid()) { 
       if ($section == 'password-change') { 
        $data = $form->getData(); 
        $encoder = new CryptPasswordEncoder(); 

        $valid = $encoder->isPasswordValid($oldPassword, $data->oldPassword, ''); 

        if (!$valid) { 
         $this->get('session')->getFlashBag()->set('notValidError', 'You are insert wrong old password'); 
         return $this->redirect($request->getUri()); 
        } 
        $ps->changePassword($user, $form); 

        $this->get('session')->getFlashBag()->set('success', 'Password Changed'); 
        return $this->redirect($request->getUri()); 

       } 

      } else { 
       $data['form'] = $form->createView(); 
      } 

     } 


     return $this->render('@SciProfile/EditProfile/editProfile.html.twig', $data); 
    } 

Это сторона прутик

{{ form_start(form) }} 
<div class="row" style="margin-top: 40px"> 
    <div class="columns large-4 content-right"> 
     {{ form_label(form.oldPassword) }} 
    </div> 
    <div class="columns large-6 content-middle"> 
     {% for flashMessage in app.session.flashbag.get('notValidError') %} 
      <div data-alert class="alert-box alert radius"> 
       {{ flashMessage }} 
      </div> 
     {% endfor %} 
     {{ form_widget(form.oldPassword) }} 
    </div> 
    <div class="columns large-2"></div> 
</div> 
Смежные вопросы