Symfony 3으로 사용자를 직접 인증하기 위해 올바르게 작동하는 맞춤 보호 인증기를 사용하고 있습니다. 이제는 사용자 가장을 지원하려고하지만 _switch_user 쿼리 매개 변수를 사용하여 사용자를 가장하려고하면 getUser() 객체는 항상 원래 사용자입니다. 내 인증은경비원으로 인증 할 때 Symfony에서 사용자 가장
class AppAuthenticator extends AbstractGuardAuthenticator
{
public function getCredentials(Request $request)
{
$username = $request->query->get('username');
if (empty($username)) {
return;
}
return array(
\t \t 'username' => $username,
);
}
public function getUser($credentials, UserProviderInterface $userProvider)
{
$username = $credentials['username'];
\t return $userProvider->loadUserByUsername($username);
}
public function checkCredentials($credentials, UserInterface $user)
{
return true;
}
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
return null;
}
public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
\t \t $data = array(
\t \t \t \t 'message' => strtr($exception->getMessageKey(), $exception->getMessageData())
\t \t \t \t // or to translate this message
\t \t \t \t // $this->translator->trans($exception->getMessageKey(), $exception->getMessageData())
\t \t);
\t \t return new JsonResponse($data, 403);
}
public function start(Request $request, AuthenticationException $authException = null)
{
return new RedirectResponse(
...
)
}
public function supportsRememberMe()
{
return false;
}
}
는 것 같다
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
providers:
app:
entity:
class: AppBundle:Authentication
property: username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: ~
switch_user: true
guard:
authenticators:
- app.authenticator
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
access_control:
- { path: ^/admin/, role: ROLE_ADMIN }
- { path: ^/, role: ROLE_USER }
입니다
내 보안 설정이되어 그 getCredentials() 나 인증 자의 thod가 항상 호출되며 이에 대한 가장을 탐지 할 수있는 방법이 없습니다. 그래서, 내 질문은 가드 인증을 사용할 때 사용자가 가장 할 수 있습니까? 그렇다면 무엇이 누락 되었습니까?