我创建了一个CRUD,允许我在后台创建用户,社团和学校。
但是,由于未知原因,我无法使用我给他的密码登录创建的用户。
这是我的控制器(创建用户的部分)
/**
* Creates a new User entity.
*
* @Route("/new", name="user_new")
* @Method({"GET", "POST"})
*/
public function newAction(Request $request)
{
$user = new User();
$form = $this->createForm('UserBundle\Form\UserType', $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$password = $this->get('security.password_encoder')->encodePassword($user, $user->getPassword());
$user->setPassword($password);
$em->persist($user);
$em->flush();
return $this->redirectToRoute('user_show', array('id' => $user->getId()));
}
return $this->render('user/new.html.twig', array(
'user' => $user,
'form' => $form->createView(),
));
}
注册新用户后,当我在fos_user表中检查它时,我可以看到密码已加密。但是,如果我尝试使用我使用的密码登录,我只需从登录表单中获取“不良凭证”。
我无法弄清楚原因。 告诉我,如果你需要查看另一个文件,我会更新我的问题
有什么想法吗?
提前谢谢
答案 0 :(得分:2)
在FOSUserBundle中创建用户和设置密码的正确方法如下:
$userManager = $this->container->get('fos_user.user_manager');
$userAdmin = $userManager->createUser();
$userAdmin->setUsername('System');
$userAdmin->setEmail('system@example.com');
$userAdmin->setPlainPassword('test');
$userAdmin->setEnabled(true);
$userManager->updateUser($userAdmin, true);
密码在数据库中保持加密状态。为了使暴力更难,数据库包含一个名为salt的附加字段。您不会将其存储在代码中,这就是为什么以后无法检查密码的原因。但实际上,您不必加密密码并将其存储在数据库中。用户模型包含一个特殊的方法setPlainPassword,用于加密密码,用正确的值填充数据库中的salt和password字段。