我正在使用symfony4内置的安全系统来制作安全系统。
我将index
页上的注册表格整数化。
并处理功能index
但是,完成注册后,用户需要再次输入用户名并再次输入密码。
我想跳过此过程。
注册后,用户无需再次输入用户名和密码。
我该如何解决?
public function index(Request $request, UserPasswordEncoderInterface $passwordEncoder)
{
$this->commonFunc = $commonFunc;
$this->data['user'] = $this->getUser();
if (!$this->data['user']){// make registration form when no login
$user = new User();
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$password = $passwordEncoder->encodePassword($user, $user->getPlainPassword());
$user->setPassword($password);
// save the User!
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
$this->data['user'] = $user;
// After registration process. the user must input id and pass again.
// I want to skip this.
return $this->redirectToRoute('index');
}
$this->data['form'] = $form->createView();
}
return $this->render('default/index.html.twig', [
'controller_name' => 'DefaultController',
'data' => $this->data
]);
}
这些是我来自@Cerad建议的最终代码。
我更改了获取tokenStorage的方式(我的环境是4.1) 不知何故,我不需要进行事件调度... 但是可以。
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
// $ this-> tokenStorage-> setToken($ token); $ this-> get('security.token_storage')-> setToken($ token);
答案 0 :(得分:2)
这是我使用的:
private function loginUser(Request $request, UserInterface $user) : void
{
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->tokenStorage->setToken($token);
$event = new InteractiveLoginEvent($request, $token);
$this->eventDispatcher->dispatch(SecurityEvents::INTERACTIVE_LOGIN, $event);
}
您可以注入令牌存储和事件分发程序,也可以将其从容器中拉出。