我正在使用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(;
以下是我使用的:
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);
}
您可以注入令牌存储和事件调度程序,也可以从容器中提取它们。