Symfony工具 - 自定义表单密码验证器 http://symfony.com/doc/current/cookbook/security/custom_password_authenticator.html
因此,这部分代码通过UserProviderInterface
获取在services.yml中定义的用户提供程序类,并返回UserInterface
。
public function authenticateToken(TokenInterface $token, UserProviderInterface $userProvider, $providerKey)
{
try {
$user = $userProvider->loadUserByUsername($token->getUsername());
默认情况下,我的自定义用户类提供程序实现了AdvancedUserInterface
以及更多功能:http://api.symfony.com/2.6/Symfony/Component/Security/Core/User/AdvancedUserInterface.html
class Users implements AdvancedUserInterface, \Serializable
问题:如何使用AdvancedUserInterface
实施UserProviderInterface
。或者我只需要手动重新创建这个AdvancedUserInterface
函数并在加载用户对象后手动检查?
感谢。我希望你明白。
编辑: 它看起来像自动调整自定义密码认证中没有调用的AdvancedUser接口函数。 所以在获取用户对象后需要调用手动这个函数
try {
$user = $userProvider->loadUserByUsername($token->getUsername());
if ($user->isAccountNonExpired()){ throw new AuthenticationException('expired');}
if ($user->isAccountNonLocked()){ throw new AuthenticationException('locked');}
if ($user->isCredentialsNonExpired()){ throw new AuthenticationException('credExpired');}
if (!$user->isEnabled()){ throw new AuthenticationException('disabled');}
答案 0 :(得分:2)
你可能有些困惑。
AdvancedUserInterface
- 表示用户实例,并从UserInterface
扩展。
UserProviderInterface
- 表示加载用户的提供商(UserInterface
)。
在方法loadUserByUsername
中,您可以返回AdvancedUserInterface
个实例。
例如:
用户:强>
class User implements AdvancedUserInterface
{
// .. Some fields and functions
}
用户提供商:
class MyUserProvider implements UserProviderInterface
{
public function loadUserByUsername($username)
{
// Get the User instance from DB or another system
return $user;
}
// Some functions
}