[CONTROLLER][Security] Override the `_next` form field in Security->register to redirect to login page

This commit is contained in:
Hugo Sales 2022-03-13 15:22:32 +00:00
parent 390c532456
commit 18864ca9fa
Signed by: someonewithpc
GPG Key ID: 7D0C7EAFC9D835A0
2 changed files with 37 additions and 29 deletions

View File

@ -11,6 +11,7 @@ use App\Core\Event;
use App\Core\Form; use App\Core\Form;
use function App\Core\I18n\_m; use function App\Core\I18n\_m;
use App\Core\Log; use App\Core\Log;
use App\Core\Router\Router;
use App\Entity\Actor; use App\Entity\Actor;
use App\Entity\Feed; use App\Entity\Feed;
use App\Entity\LocalUser; use App\Entity\LocalUser;
@ -33,6 +34,7 @@ use Component\Subscription\Entity\ActorSubscription;
use Doctrine\DBAL\Exception\UniqueConstraintViolationException; use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
use LogicException; use LogicException;
use Symfony\Component\Form\Extension\Core\Type\EmailType; use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
@ -96,33 +98,37 @@ class Security extends Controller
// \App\Core\Security $authenticator, // \App\Core\Security $authenticator,
// UserAuthenticatorInterface $user_authenticator, // UserAuthenticatorInterface $user_authenticator,
): array|Response { ): array|Response {
$form = Form::create([ $form = Form::create(
['nickname', TextType::class, [ [
'label' => _m('Nickname'), ['nickname', TextType::class, [
'help' => _m('Your desired nickname (e.g., j0hnD03)'), 'label' => _m('Nickname'),
'constraints' => [ 'help' => _m('Your desired nickname (e.g., j0hnD03)'),
new NotBlank(['message' => _m('Please enter a nickname')]), 'constraints' => [
new Length([ new NotBlank(['message' => _m('Please enter a nickname')]),
'max' => Nickname::MAX_LEN, new Length([
'maxMessage' => _m(['Your nickname must be at most # characters long'], ['count' => Nickname::MAX_LEN]), 'max' => Nickname::MAX_LEN,
]), 'maxMessage' => _m(['Your nickname must be at most # characters long'], ['count' => Nickname::MAX_LEN]),
], ]),
'block_name' => 'nickname', ],
'label_attr' => ['class' => 'section-form-label'], 'block_name' => 'nickname',
'invalid_message' => _m('Nickname not valid. Please provide a valid nickname.'), 'label_attr' => ['class' => 'section-form-label'],
]], 'invalid_message' => _m('Nickname not valid. Please provide a valid nickname.'),
['email', EmailType::class, [ ]],
'label' => _m('Email'), ['email', EmailType::class, [
'help' => _m('Desired email for this account (e.g., john@provider.com)'), 'label' => _m('Email'),
'constraints' => [new NotBlank(['message' => _m('Please enter an email')])], 'help' => _m('Desired email for this account (e.g., john@provider.com)'),
'block_name' => 'email', 'constraints' => [new NotBlank(['message' => _m('Please enter an email')])],
'label_attr' => ['class' => 'section-form-label'], 'block_name' => 'email',
'invalid_message' => _m('Email not valid. Please provide a valid email.'), 'label_attr' => ['class' => 'section-form-label'],
'attr' => ['autocomplete' => 'email'], 'invalid_message' => _m('Email not valid. Please provide a valid email.'),
]], 'attr' => ['autocomplete' => 'email'],
FormFields::repeated_password(['attr' => ['autocomplete' => 'new-password']]), ]],
['register', SubmitType::class, ['label' => _m('Register')]], FormFields::repeated_password(['attr' => ['autocomplete' => 'new-password']]),
], form_options: ['block_prefix' => 'register']); ['register', SubmitType::class, ['label' => _m('Register')]]
],
extra_data: ['_next' => Router::url('security_login')],
form_options: ['block_prefix' => 'register']
);
$form->handleRequest($request); $form->handleRequest($request);
@ -205,6 +211,7 @@ class Security extends Controller
$user->setIsEmailVerified(true); $user->setIsEmailVerified(true);
} }
return Form::forceRedirect($form, $request);
// return $user_authenticator->authenticateUser($user, $authenticator, $request); // return $user_authenticator->authenticateUser($user, $authenticator, $request);
} }

View File

@ -100,8 +100,9 @@ abstract class Form
string $type = '\Symfony\Component\Form\Extension\Core\Type\FormType', string $type = '\Symfony\Component\Form\Extension\Core\Type\FormType',
array $form_options = [], array $form_options = [],
): SymfFormInterface { ): SymfFormInterface {
$name = $form[array_key_last($form)][0]; $name = $form[array_key_last($form)][0];
$r = Common::getRequest(); $r = Common::getRequest();
$form[] = ['_next', HiddenType::class, ['data' => $r->get('next') ?? $r->get('_next') ?? $r->getRequestUri()]]; $form[] = ['_next', HiddenType::class, ['data' => $r->get('next') ?? $r->get('_next') ?? $r->getRequestUri()]];
$fb = self::$form_factory->createNamedBuilder($name, $type, data: null, options: array_merge($form_options, ['translation_domain' => false])); $fb = self::$form_factory->createNamedBuilder($name, $type, data: null, options: array_merge($form_options, ['translation_domain' => false]));