Хеширование пароля при регистрации нового пользователя в Symfony - PullRequest
0 голосов
/ 18 января 2020

У меня проблема с регистрацией новых пользователей в моей базе данных пользователей. Я хочу иметь sh пароль при отправке формы. Я не совсем уверен, как это сделать, и я новичок в этом. Мне нужна помощь, ребята. Мой код:

<?php


namespace App\Controller;

use App\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;

class UserController extends AbstractController{

    /**
     * @Route("/users", name="signingUP")
     */
    public function new(Request $request){
        $user = new User();

        $form = $this->createFormBuilder($user)
            ->add('userName', TextType::class, array('label'=>'Username'))
            ->add('fullName', TextType::class, array('label'=>'Fullname'))
            ->add('email', EmailType::class, array('label'=>'Email'))
            ->add('password', PasswordType::class, array('label'=>'Password'))
            ->add('save', SubmitType::class, array('label'=>'Submit'))
            ->getForm();



        $form->handleRequest($request);

        if($form->isSubmitted() && $form->isValid()){
            $user = $form->getData();

            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($user);
            $entityManager->flush();

            return $this->render('index.html.twig', array('data'=>'Added to database'));
        }
        return $this->render('users/signUp.html.twig', array('form'=>$form->createView()));
    }
}

Добавляет все остальное так, как я хочу, но не могу с паролем

1 Ответ

0 голосов
/ 19 января 2020

Просто передайте UserPasswordEncoderInterface на ваш контроллер и закодируйте пароль

 public function new(Request $request, UserPasswordEncoderInterface $encoder){
        //$user = new User(); <- this is not necessary as long as you set data_class in form to your User class.

        $form = $this->createForm(RegisterType::class); // Move your register form to a RegisterType in Form namespace (less mess in your controllers)

        $form->handleRequest($request);

        if($form->isSubmitted() && $form->isValid()){
            $user = $form->getData();
            $user->setPassword($encoder->encodePassword($user, $user->getPlainPassword);
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($user);
            $entityManager->flush();

            return $this->render('index.html.twig', array('data'=>'Added to database'));
        }
        return $this->render('users/signUp.html.twig', array('form'=>$form->createView()));
    }

Также убедитесь, что у вас есть кодировщик, указанный в security.yml, хотя он уже должен быть установлен на auto.

# config/packages/security.yaml
security:
    # ...

    encoders:
        App\Entity\User: 'auto'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...