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