在Symfony中注册新用户时哈希密码



我在将新用户注册到我的用户数据库时遇到问题。我想在提交表单时对密码进行哈希处理。我不确定该怎么做,我是新手。我需要帮助伙计们。我的代码:

<?php
namespace AppController;
use AppEntityUser;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentFormExtensionCoreTypeEmailType;
use SymfonyComponentFormExtensionCoreTypeSubmitType;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormExtensionCoreTypePasswordType;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentRoutingAnnotationRoute;
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()));
}
}

它以我想要的方式添加了其他所有内容,但无法使用密码

简单传递用户密码编码器接口到控制器并编码密码

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:
AppEntityUser: 'auto'