Implement changing of user password
This commit is contained in:
		
							parent
							
								
									9b3c970bba
								
							
						
					
					
						commit
						b8c6d41dc9
					
				
					 3 changed files with 51 additions and 50 deletions
				
			
		|  | @ -5,6 +5,7 @@ namespace App\Controller; | ||||||
| use App\Entity\Wish; | use App\Entity\Wish; | ||||||
| use App\Entity\User; | use App\Entity\User; | ||||||
| use App\Form\WishFormType; | use App\Form\WishFormType; | ||||||
|  | use App\Form\ChangePasswordFormType; | ||||||
| 
 | 
 | ||||||
| use App\Repository\OfferingRepository; | use App\Repository\OfferingRepository; | ||||||
| use App\Repository\WishRepository; | use App\Repository\WishRepository; | ||||||
|  | @ -14,7 +15,9 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; | ||||||
| use Symfony\Component\HttpFoundation\Request; | use Symfony\Component\HttpFoundation\Request; | ||||||
| use Symfony\Component\HttpFoundation\Response; | use Symfony\Component\HttpFoundation\Response; | ||||||
| use Symfony\Component\HttpKernel\Exception\HttpException; | use Symfony\Component\HttpKernel\Exception\HttpException; | ||||||
|  | use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; | ||||||
| use Symfony\Component\Routing\Annotation\Route; | use Symfony\Component\Routing\Annotation\Route; | ||||||
|  | 
 | ||||||
| use Twig\Environment; | use Twig\Environment; | ||||||
| 
 | 
 | ||||||
| class UserController extends AbstractController | class UserController extends AbstractController | ||||||
|  | @ -27,7 +30,7 @@ class UserController extends AbstractController | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     #[Route('/user', name: 'user_page')]
 |     #[Route('/user', name: 'user_page')]
 | ||||||
|     public function user(OfferingRepository $offeringRepository): Response |     public function user(OfferingRepository $offeringRepository, Request $request, UserPasswordHasherInterface $passwordEncoder): Response | ||||||
|     { |     { | ||||||
|         $user = $this->getUser(); |         $user = $this->getUser(); | ||||||
| 
 | 
 | ||||||
|  | @ -36,9 +39,27 @@ class UserController extends AbstractController | ||||||
|             $this->addFlash('error','Your email is not verified, please check your inbox'); |             $this->addFlash('error','Your email is not verified, please check your inbox'); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         $form = $this->createForm(ChangePasswordFormType::class); | ||||||
|  |         $form->handleRequest($request); | ||||||
|  | 
 | ||||||
|  |         if ($form->isSubmitted() && $form->isValid()) { | ||||||
|  |             $user->setPassword( | ||||||
|  |                 $passwordEncoder->hashPassword( | ||||||
|  |                     $user, | ||||||
|  |                     $form->get('plainPassword')->getData() | ||||||
|  |                 ) | ||||||
|  |             ); | ||||||
|  | 
 | ||||||
|  |             $entityManager = $this->getDoctrine()->getManager(); | ||||||
|  |             $entityManager->persist($user); | ||||||
|  |             $entityManager->flush(); | ||||||
|  | 
 | ||||||
|  |             $this->addFlash("success", "Successfully changed the password!"); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         return $this->render('user/index.html.twig', [ |         return $this->render('user/index.html.twig', [ | ||||||
|             'user' => $user, |             'user' => $user, | ||||||
|             'offers' => $offeringRepository->findByUser($user), |             'changePassword_form' => $form->createView(), | ||||||
|         ]); |         ]); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -5,6 +5,7 @@ namespace App\Form; | ||||||
| use Symfony\Component\Form\AbstractType; | use Symfony\Component\Form\AbstractType; | ||||||
| use Symfony\Component\Form\Extension\Core\Type\PasswordType; | use Symfony\Component\Form\Extension\Core\Type\PasswordType; | ||||||
| use Symfony\Component\Form\Extension\Core\Type\RepeatedType; | use Symfony\Component\Form\Extension\Core\Type\RepeatedType; | ||||||
|  | use Symfony\Component\Form\Extension\Core\Type\SubmitType; | ||||||
| use Symfony\Component\Form\FormBuilderInterface; | use Symfony\Component\Form\FormBuilderInterface; | ||||||
| use Symfony\Component\OptionsResolver\OptionsResolver; | use Symfony\Component\OptionsResolver\OptionsResolver; | ||||||
| use Symfony\Component\Validator\Constraints\Length; | use Symfony\Component\Validator\Constraints\Length; | ||||||
|  | @ -39,6 +40,7 @@ class ChangePasswordFormType extends AbstractType | ||||||
|                 // this is read and encoded in the controller
 |                 // this is read and encoded in the controller
 | ||||||
|                 'mapped' => false, |                 'mapped' => false, | ||||||
|             ]) |             ]) | ||||||
|  |             ->add('submit', SubmitType::class) | ||||||
|         ; |         ; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,55 +1,33 @@ | ||||||
| {% extends 'base.html.twig' %} | {% extends 'base.html.twig' %} | ||||||
| 
 | 
 | ||||||
| {% block title %}User{% endblock %} | {% block title %}User | ||||||
|  | {% endblock %} | ||||||
| 
 | 
 | ||||||
| {% block body %} | {% block body %} | ||||||
|     {% for message in app.flashes('error') %} | 	{% for message in app.flashes('error') %} | ||||||
|         <div class="alert alert-danger" role="alert"> | 		<div class="alert alert-danger" role="alert"> | ||||||
|             {{ message }} | 			{{ message }} | ||||||
|         </div> | 		</div> | ||||||
|     {% endfor %} | 	{% endfor %} | ||||||
|     {% for message in app.flashes('success') %} | 	{% for message in app.flashes('success') %} | ||||||
|         <div class="alert alert-success" role="alert"> | 		<div class="alert alert-success" role="alert"> | ||||||
|             {{ message }} | 			{{ message }} | ||||||
|         </div> | 		</div> | ||||||
|     {% endfor %} | 	{% endfor %} | ||||||
| 
 | 
 | ||||||
|     <div class="alert alert-info" role="alert"> | 	<div class="mb-5"> | ||||||
|         Please note: This is not yet functional! | 		<h1>Hello | ||||||
|     </div> | 			{{ user.username }}!</p> | ||||||
|  | 	</div> | ||||||
|  | 	<div class="mb-5"> | ||||||
|  | 		<h2>Change Password</h2> | ||||||
|  | 		{{ form_start(changePassword_form) }} | ||||||
|  | 		{{ form_widget(changePassword_form) }} | ||||||
|  | 		{{ form_end(changePassword_form) }} | ||||||
|  | 	</div> | ||||||
| 
 | 
 | ||||||
|     <div class="mb-3"> | 	<div class="mb-3"> | ||||||
|         <h1>Hello {{ user.username }}!</p> | 		<h2>Delete Account</h2> | ||||||
|     </div> | 		<button class="btn btn-danger">Delete Account</button> | ||||||
|     <div class="mb-3"> | 	</div> | ||||||
|         <form method="post"> |  | ||||||
|             <h3 class="mb-3 font-weight-normal">Change your user data</h3> |  | ||||||
|             <div class="mb-3"> |  | ||||||
|                 <label for="inputEmail" class="form-label">Email address</label> |  | ||||||
|                 <input name="email" type="email" class="form-control" id="inputEmail" aria-describedby="emailHelp" placeholder="{{ app.user.email }}" readonly> |  | ||||||
|             </div> |  | ||||||
|             <div class="mb-3"> |  | ||||||
|                 <label for="inputPassword">Password</label> |  | ||||||
|                 <input type="password" name="password" id="inputPassword" class="form-control"> |  | ||||||
|             </div> |  | ||||||
| 
 |  | ||||||
|             <div class="mb-3"> |  | ||||||
|                 <label for="inputPlz">PLZ</label> |  | ||||||
|                 <input name="plz" id="inputPlz" class="form-control" value="{{ user.zipcode }}"> |  | ||||||
|             </div> |  | ||||||
| 
 |  | ||||||
|             <input type="hidden" name="_csrf_token" |  | ||||||
|                 value="{{ csrf_token('authenticate') }}" |  | ||||||
|             > |  | ||||||
| 
 |  | ||||||
|             <button class="btn btn-lg btn-primary" type="submit"> |  | ||||||
|                 Save |  | ||||||
|             </button> |  | ||||||
|         </form> |  | ||||||
|     </div> |  | ||||||
| 
 |  | ||||||
|     <div class="mb-3"> |  | ||||||
|         <h3 class="mb-3">Delete Account</h3> |  | ||||||
|         <button class="btn btn-danger">Delete Account</button> |  | ||||||
|     </div> |  | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  |  | ||||||
		Reference in a new issue