大家好,我的問題是,我設置了自定義用戶提供,當我要登錄還給我錯誤: there is no user provider for user
Symfony2的自定義用戶提供身份驗證後刷新
There is no user provider for user "MainBundle\Security\User\SsoUser".
但是當我PRES F5刷新頁面作品! 爲什麼這是一個問題? 我的設置是:
secured_area:
pattern: ^/
simple_preauth:
authenticator: sso_authenticator
和我autenticator類:
/**
* @Service("sso_authenticator")
*/
class SsoAuthenticator implements SimplePreAuthenticatorInterface
{
/**
* @var SsoUserProvider
*/
protected $userProvider;
/**
* @InjectParams({
* "userProvider" = @Inject("sso_user_provider")
* })
*/
public function __construct(SsoUserProvider $userProvider)
{
$this->userProvider = $userProvider;
}
public function createToken(Request $request, $providerKey)
{
$user = $request->getSession()->get('sso_user');
if (!$user) {
throw new BadCredentialsException('No user found');
}
return new PreAuthenticatedToken(
'anon.', $user, $providerKey
);
}
public function authenticateToken(TokenInterface $token, UserProviderInterface $userProvider, $providerKey)
{
$user = $token->getCredentials();
$sso_user = $this->userProvider->loadUser($user);
return new PreAuthenticatedToken(
$sso_user, $user, $providerKey, $sso_user->getRoles()
);
}
public function supportsToken(TokenInterface $token, $providerKey)
{
return $token instanceof PreAuthenticatedToken && $token->getProviderKey() === $providerKey;
}
}
SsoUserProvider類:
/**
* @Service("sso_user_provider")
*/
class SsoUserProvider implements UserProviderInterface
{
public function loadUser($user)
{
return new SsoUser($user['id'], $user['username'], $user['password'], null, $user['email'], array('ROLE_USER'));
}
public function loadUserByUsername($username)
{
throw new \RuntimeException('Method unsupported');
}
public function refreshUser(UserInterface $user)
{
if (!$user instanceof SsoUser && !$this->supportsClass(get_class($user))) {
throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', get_class($user)));
}
return $user;
}
public function supportsClass($class)
{
return $class === 'MainBundle\\Security\\User\\SsoUser';
}
}
沒有什麼變化,或者如果我只禁用此'!$這個 - > supportsClass(get_class($用戶)'聲明 – Vardius
你檢查,如果symfony中調用你的代碼?你可以通過添加芯片或調試 –
我認爲它沒有調用'createToken()'方法 – Vardius