Skip to content

Commit

Permalink
Use session invalidation to force user logout to avoid re-activation …
Browse files Browse the repository at this point in the history
…of just retired member.
  • Loading branch information
thisismeonmounteverest committed Apr 13, 2024
1 parent bfb6349 commit 399f166
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions src/Controller/ProfileController.php
Expand Up @@ -24,6 +24,7 @@
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactoryInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Contracts\Translation\TranslatorInterface;

Expand Down Expand Up @@ -222,7 +223,7 @@ public function deleteProfileNotLoggedIn(
$member = $memberRepository->findOneBy(['username' => $data['username']]);

$verified = false;
if (null === $member) {
if (null === $member || !$member->isBrowsable()) {
$deleteProfileForm->addError(new FormError($translator->trans('profile.delete.credentials')));
} else {
$passwordHasher = $passwordHasherFactory->getPasswordHasher($member);
Expand All @@ -239,7 +240,7 @@ public function deleteProfileNotLoggedIn(
}

if ($success) {
return $this->redirectToRoute('security_logout');
return $this->redirectToRoute('homepage');
}
}

Expand All @@ -251,8 +252,12 @@ public function deleteProfileNotLoggedIn(
/**
* @Route("/members/{username}/delete", name="profile_delete")
*/
public function deleteProfile(Request $request, Member $member, ProfileModel $profileModel): Response
{
public function deleteProfile(
Request $request,
TokenStorageInterface $tokenStorage,
Member $member,
ProfileModel $profileModel
): Response {
$loggedInMember = $this->getUser();
if ($member !== $loggedInMember) {
return $this->redirectToRoute('members_profile', ['username' => $member->getUsername()]);
Expand All @@ -267,7 +272,10 @@ public function deleteProfile(Request $request, Member $member, ProfileModel $pr
$success = $profileModel->retireProfile($member, $deleteProfileForm->getData());

if ($success) {
return $this->redirectToRoute('security_logout');
// force logout
$tokenStorage->setToken(null); // Force logout
$request->getSession()->invalidate();
return $this->redirectToRoute('homepage');
}
}

Expand Down

0 comments on commit 399f166

Please sign in to comment.