2016-10-20 3 views
-1

Я использую symfony 3 с FormBuilder.Symfony Encrypt Password

теперь я создать реестр форма ..

одна проблема, которую я получаю это использовать кодирование для шифрования пароля

сегодня я использую как это:

public function SignupAction(Request $request){ 
    $form = $this->createForm(RegisterType::class); 
    $form->handleRequest($request); 
    if ($form->isSubmitted() && $form->isValid()){ 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($form->getData()); 
     $em->flush(); 
     return $this->redirectToRoute('homepage'); 
    } 
    return $this->render('AppBundle:Site:Register.html.twig', [ 
     'form' => $form->createView() 
    ]); 
} 

каждый поданный в введенный в БД. , но пароль не зашифрован.

Как я могу зашифровать пароль?

благодарит

ответ

0

Вы должны следовать документам: How to implement a registration form.

В принципе, ваш RegisterType должен иметь класс по умолчанию User, который реализует UserInterface и пароль должен быть зашифрован при сохранении формы.

0

В symfony 2.7 есть класс с именем MessageDigestPasswordEncoder.

Таким образом, вы можете получить кодировщик:

$encoder = new \Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder($algorithm,$encode_as_base64, $iterations); 

Вы можете заполнить значение $ алгоритма, $ encode_as_base64 и $ итерации ти конфигурации вашего security.yml разбора содержания security.yml с YAML: : синтаксический анализ. Или просто используя те же значения, определенные там.

После того как вы enconder, вызовите метод encodePassword

$password = $encoder->encodePassword($password, $salt) 

, которые возвращают закодированный пароль с той же конфигурацией вашего датчика. Обратите внимание, что вы должны указать значение $ salt. Вы можете использовать random_bytes, как это предлагается.