Авторизуйтесь автоматически после регистрации - PullRequest
0 голосов
/ 25 ноября 2018

Я создаю систему безопасности, используя встроенную систему безопасности 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-> получить ( 'security.token_storage') -> setToken ($ токенов);

1 Ответ

0 голосов
/ 25 ноября 2018

Вот что я использую:

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);
}

Вы можете либо добавить хранилище токенов и диспетчер событий, либо извлечь их из контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...