diff --git a/src/Form/ChangePasswordType.php b/src/Form/ChangePasswordType.php new file mode 100644 index 0000000..bc67af5 --- /dev/null +++ b/src/Form/ChangePasswordType.php @@ -0,0 +1,50 @@ +add('oldPassword', PasswordType::class, [ + 'label' => 'Ancien mot de passe', + 'mapped' => false, + ]) + ->add('newPassword', RepeatedType::class, [ + 'type' => PasswordType::class, + 'mapped' => false, + 'first_options' => ['label' => 'Nouveau mot de passe'], + 'second_options' => ['label' => 'Confirmer mot de passe'], + + # Mise en place de contraintes dans la saisie du mot de passe + 'constraints' => [ + new NotBlank([ + 'message' => 'Veuillez saisir un mot de passe', + ]), + new Length([ + 'min' => 8, + 'minMessage' => 'Votre mot de passe doit faire au moins {{ limit }} caractères', + 'max' => 4096, + ]), + ], + ]) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + // Configure your form options here + ]); + } +} diff --git a/src/Security/AppCustomAuthenticator.php b/src/Security/AppCustomAuthenticator.php new file mode 100644 index 0000000..b073d37 --- /dev/null +++ b/src/Security/AppCustomAuthenticator.php @@ -0,0 +1,60 @@ +getPayload()->getString('email'); + + $request->getSession()->set(SecurityRequestAttributes::LAST_USERNAME, $email); + + return new Passport( + new UserBadge($email), + new PasswordCredentials($request->getPayload()->getString('password')), + [ + new CsrfTokenBadge('authenticate', $request->getPayload()->getString('_csrf_token')), + new RememberMeBadge(), + ] + ); + } + + public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response + { + if ($targetPath = $this->getTargetPath($request->getSession(), $firewallName)) { + return new RedirectResponse($targetPath); + } + + // For example: + // return new RedirectResponse($this->urlGenerator->generate('some_route')); + throw new \Exception('TODO: provide a valid redirect inside '.__FILE__); + } + + protected function getLoginUrl(Request $request): string + { + return $this->urlGenerator->generate(self::LOGIN_ROUTE); + } +} diff --git a/templates/user/edit_password.html.twig b/templates/user/edit_password.html.twig new file mode 100644 index 0000000..b1c27cd --- /dev/null +++ b/templates/user/edit_password.html.twig @@ -0,0 +1,37 @@ +{# templates/user/edit_password.html.twig #} +{% extends 'base.html.twig' %} + +{% block title %}Modifier mon mot de passe | {{ parent() }}{% endblock %} + +{% block body %} +
+
+ +

+ Sécurité du compte +

+ + {{ form_start(form) }} +
+ {# Champ Ancien Mot de Passe #} +
+ {{ form_label(form.oldPassword, null, {'label_attr': {'class': 'block text-sm font-medium text-gray-700 mb-1'}}) }} + {{ form_widget(form.oldPassword, {'attr': {'class': 'w-full px-4 py-2 border rounded-lg focus:ring-2 focus:ring-brand-teal focus:border-transparent outline-none transition-all'}}) }} + {{ form_errors(form.oldPassword) }} +
+ + {# Champs Nouveau Mot de Passe (RepeatedType) #} +
+ {{ form_row(form.newPassword.first, {'attr': {'class': 'w-full px-4 py-2 border rounded-lg focus:ring-2 focus:ring-brand-teal outline-none'}}) }} + {{ form_row(form.newPassword.second, {'attr': {'class': 'w-full px-4 py-2 border rounded-lg focus:ring-2 focus:ring-brand-teal outline-none'}}) }} +
+ + +
+ {{ form_end(form) }} + +
+
+{% endblock %} \ No newline at end of file