Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit debb422

Browse files
committed
[Security] InMemoryUserProvider now concerns whether user's password is changed when refreshing
1 parent d9c0c55 commit debb422

File tree

2 files changed

+64
-17
lines changed

2 files changed

+64
-17
lines changed

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

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -67,17 +67,17 @@ public function createUser(UserInterface $user)
6767
*/
6868
public function loadUserByUsername($username)
6969
{
70-
if (!isset($this->users[strtolower($username)])) {
71-
$ex = new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username));
72-
$ex->setUsername($username);
73-
74-
throw $ex;
75-
}
76-
77-
$user = $this->users[strtolower($username)];
70+
$storedUser = $this->getUser($username);
7871

79-
return new User($user->getUsername(), $user->getPassword(), $user->getRoles(), $user->isEnabled(), $user->isAccountNonExpired(),
80-
$user->isCredentialsNonExpired(), $user->isAccountNonLocked());
72+
return new User(
73+
$storedUser->getUsername(),
74+
$storedUser->getPassword(),
75+
$storedUser->getRoles(),
76+
$storedUser->isEnabled(),
77+
$storedUser->isAccountNonExpired(),
78+
$storedUser->isCredentialsNonExpired(),
79+
$storedUser->isAccountNonLocked()
80+
);
8181
}
8282

8383
/**
@@ -89,7 +89,17 @@ public function refreshUser(UserInterface $user)
8989
throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', get_class($user)));
9090
}
9191

92-
return $this->loadUserByUsername($user->getUsername());
92+
$storedUser = $this->getUser($user->getUsername());
93+
94+
return new User(
95+
$storedUser->getUsername(),
96+
$storedUser->getPassword(),
97+
$storedUser->getRoles(),
98+
$storedUser->isEnabled(),
99+
$storedUser->isAccountNonExpired(),
100+
$storedUser->isCredentialsNonExpired() && $storedUser->getPassword() === $user->getPassword(),
101+
$storedUser->isAccountNonLocked()
102+
);
93103
}
94104

95105
/**
@@ -99,4 +109,20 @@ public function supportsClass($class)
99109
{
100110
return $class === 'Symfony\Component\Security\Core\User\User';
101111
}
112+
113+
/**
114+
* @param string $username
115+
* @return User
116+
*/
117+
private function getUser($username)
118+
{
119+
if (!isset($this->users[strtolower($username)])) {
120+
$ex = new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username));
121+
$ex->setUsername($username);
122+
123+
throw $ex;
124+
}
125+
126+
return $this->users[strtolower($username)];
127+
}
102128
}

src/Symfony/Component/Security/Tests/Core/User/InMemoryUserProviderTest.php

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,39 @@ class InMemoryUserProviderTest extends \PHPUnit_Framework_TestCase
1818
{
1919
public function testConstructor()
2020
{
21-
$provider = new InMemoryUserProvider(array(
21+
$provider = $this->createProvider();
22+
23+
$user = $provider->loadUserByUsername('fabien');
24+
$this->assertEquals('foo', $user->getPassword());
25+
$this->assertEquals(array('ROLE_USER'), $user->getRoles());
26+
$this->assertFalse($user->isEnabled());
27+
}
28+
29+
public function testRefresh()
30+
{
31+
$user = new User('fabien', 'bar');
32+
33+
$provider = $this->createProvider();
34+
35+
$refreshedUser = $provider->refreshUser($user);
36+
$this->assertEquals('foo', $refreshedUser->getPassword());
37+
$this->assertEquals(array('ROLE_USER'), $refreshedUser->getRoles());
38+
$this->assertFalse($refreshedUser->isEnabled());
39+
$this->assertFalse($refreshedUser->isCredentialsNonExpired());
40+
}
41+
42+
/**
43+
* @return InMemoryUserProvider
44+
*/
45+
protected function createProvider()
46+
{
47+
return new InMemoryUserProvider(array(
2248
'fabien' => array(
2349
'password' => 'foo',
2450
'enabled' => false,
2551
'roles' => array('ROLE_USER'),
2652
),
2753
));
28-
29-
$user = $provider->loadUserByUsername('fabien');
30-
$this->assertEquals('foo', $user->getPassword());
31-
$this->assertEquals(array('ROLE_USER'), $user->getRoles());
32-
$this->assertFalse($user->isEnabled());
3354
}
3455

3556
public function testCreateUser()

0 commit comments

Comments
 (0)