안녕 내 문제는 내가 정의 사용자 공급자를 설정한다는 것입니다 새로 고침 : there is no user provider for user
Symfony2 사용자 정의 사용자 공급자 인증합니다 후,
There is no user provider for user "MainBundle\Security\User\SsoUser".
을하지만 난 대가로 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';
}
}
아무것도 변경하거나 내가 사용하지 않도록 경우에만이'! $ this-은> supportsClass 당신이 확인 했 – Vardius
(get_class ($ 사용자)'문 심포니는 당신을 호출하는 경우 code? 당신은 die 또는 debugging을 추가하여 할 수있다. –
나는'createToken()'메소드 – Vardius