Skip to content

Commit 6c7a6ff

Browse files
committed
feature symfony#57773 [Security] pass the current token to the checkPostAuth() method of user checkers (xabbuh)
This PR was merged into the 7.2 branch. Discussion ---------- [Security] pass the current token to the `checkPostAuth()` method of user checkers | Q | A | ------------- | --- | Branch? | 7.2 | Bug fix? | no | New feature? | yes | Deprecations? | no | Issues | Fix symfony#50650 | License | MIT Commits ------- 35b97b9 pass the current token to the checkPostAuth() method of user checkers
2 parents 5cb7c7b + 35b97b9 commit 6c7a6ff

File tree

9 files changed

+25
-6
lines changed

9 files changed

+25
-6
lines changed

UPGRADE-7.2.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ FrameworkBundle
1616
Security
1717
--------
1818

19+
* Add `$token` argument to `UserCheckerInterface::checkPostAuth()`
1920
* Deprecate argument `$secret` of `RememberMeToken` and `RememberMeAuthenticator`
2021

2122
String

src/Symfony/Component/Security/Core/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ CHANGELOG
44
7.2
55
---
66

7+
* Add `$token` argument to `UserCheckerInterface::checkPostAuth()`
78
* Deprecate argument `$secret` of `RememberMeToken`
89

910
7.0

src/Symfony/Component/Security/Core/User/ChainUserChecker.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
namespace Symfony\Component\Security\Core\User;
1313

14+
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
15+
1416
final class ChainUserChecker implements UserCheckerInterface
1517
{
1618
/**
@@ -27,10 +29,16 @@ public function checkPreAuth(UserInterface $user): void
2729
}
2830
}
2931

30-
public function checkPostAuth(UserInterface $user): void
32+
public function checkPostAuth(UserInterface $user /*, TokenInterface $token*/): void
3133
{
34+
$token = 1 < \func_num_args() ? func_get_arg(1) : null;
35+
3236
foreach ($this->checkers as $checker) {
33-
$checker->checkPostAuth($user);
37+
if ($token instanceof TokenInterface) {
38+
$checker->checkPostAuth($user, $token);
39+
} else {
40+
$checker->checkPostAuth($user);
41+
}
3442
}
3543
}
3644
}

src/Symfony/Component/Security/Core/User/UserCheckerInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,5 @@ public function checkPreAuth(UserInterface $user): void;
3535
*
3636
* @throws AccountStatusException
3737
*/
38-
public function checkPostAuth(UserInterface $user): void;
38+
public function checkPostAuth(UserInterface $user /*, TokenInterface $token*/): void;
3939
}

src/Symfony/Component/Security/Http/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ CHANGELOG
44
7.2
55
---
66

7+
* Pass the current token to the `checkPostAuth()` method of user checkers
78
* Deprecate argument `$secret` of `RememberMeAuthenticator`
89

910
7.1

src/Symfony/Component/Security/Http/EventListener/UserCheckerListener.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public function postCheckCredentials(AuthenticationSuccessEvent $event): void
4747
return;
4848
}
4949

50-
$this->userChecker->checkPostAuth($user);
50+
$this->userChecker->checkPostAuth($user, $event->getAuthenticationToken());
5151
}
5252

5353
public static function getSubscribedEvents(): array

src/Symfony/Component/Security/Http/Firewall/SwitchUserListener.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ private function attemptSwitchUser(Request $request, string $username): ?TokenIn
163163

164164
$this->logger?->info('Attempting to switch to user.', ['username' => $username]);
165165

166-
$this->userChecker->checkPostAuth($user);
166+
$this->userChecker->checkPostAuth($user, $token);
167167

168168
$roles = $user->getRoles();
169169
$originatedFromUri = str_replace('/&', '/?', preg_replace('#[&?]'.$this->usernameParameter.'=[^&]*#', '', $request->getRequestUri()));

src/Symfony/Component/Security/Http/Tests/EventListener/UserCheckerListenerTest.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,14 @@ public function testPostAuthValidCredentials()
5858
$this->listener->postCheckCredentials(new AuthenticationSuccessEvent(new PostAuthenticationToken($this->user, 'main', [])));
5959
}
6060

61+
public function testTokenIsPassedToPost()
62+
{
63+
$token = new PostAuthenticationToken($this->user, 'main', []);
64+
$this->userChecker->expects($this->once())->method('checkPostAuth')->with($this->user, $token);
65+
66+
$this->listener->postCheckCredentials(new AuthenticationSuccessEvent($token));
67+
}
68+
6169
private function createCheckPassportEvent($passport = null)
6270
{
6371
$passport ??= new SelfValidatingPassport(new UserBadge('test', fn () => $this->user));

src/Symfony/Component/Security/Http/Tests/Firewall/SwitchUserListenerTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ public function testSwitchUser()
184184
->willReturn(true);
185185

186186
$this->userChecker->expects($this->once())
187-
->method('checkPostAuth')->with($this->callback(fn ($user) => 'kuba' === $user->getUserIdentifier()));
187+
->method('checkPostAuth')->with($this->callback(fn ($user) => 'kuba' === $user->getUserIdentifier()), $token);
188188

189189
$listener = new SwitchUserListener($this->tokenStorage, $this->userProvider, $this->userChecker, 'provider123', $this->accessDecisionManager);
190190
$listener($this->event);

0 commit comments

Comments
 (0)