$ token-> getUser () возвращает пустой объект в onAuthenticationSuccess - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь настроить аутентификацию для пользователей моего API, используя собственную систему аутентификации с защитой.

Когда аутентификация успешна, в onAuthenticationSuccess () я пытаюсь отправить свой пользовательский объект в ответ, используя $ token-> getUser (), но все, что я получаю, это пустой объект.

Хотя я получаю ожидаемый результат, когда вызываю $ token-> getUserName ()

Вот выдержки из моего класса TokenAuthenticator

class TokenAuthenticator extends AbstractGuardAuthenticator
{
  private $em;

  // [...]

  public function getUser($credentials, UserProviderInterface $userProvider)
  {
    $token = $credentials;

    if (null === $token) {
      return;
    }

    $client = new Google_Client(['client_id' => 'my_client_id']);

    $payload = $client->verifyIdToken($token);

    if ($payload) 
    {
      $userid = $payload['sub'];
      $domain = $payload['hd'];
      $email = $payload['email'];

      if($domain === 'mydomain.com')
      {
        $userRepo = $this->em->getRepository(User::class);

        $user = $userRepo->findOneBy(['googleId' => $userid])?
                 $userRepo->findOneBy(['googleId' => $userid]):
                 $userRepo->findOneBy(['email' => $email]);

        if(!$user)
        {
          $user = new User();
          $user->setFirstname($payload['given_name']);
          $user->setLastname($payload['family_name']);
          $user->setEmail($email);
          $user->setRoles(['ROLE_TEACHER']);
          $user->setCreated(new DateTime('NOW'));
        }

        if(!$user->getGoogleId())
        {
          $user->setGoogleId($userid);
          $user->setModified(new DateTime('NOW'));

          $user = $this->em->persist($user);
          $this->em->flush();
        }

        return $user;
      }
      else
      {
        return false;
      }
    }
    else
    {
      return false;
    }
  }

  public function checkCredentials($credentials, UserInterface $user)
  {
    // return true to cause authentication success
    return true;
  }

  public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
  {
    $user = $token->getUser();
    return new JsonResponse($user, Response::HTTP_OK);
  }

  // [...]
}

И мой файл security.yaml

security:
  # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
  providers:
      # used to reload user from session & other features (e.g. switch_user)
      app_user_provider:
          entity:
              class: App\Entity\User
              property: email
      # used to reload user from session & other features (e.g. switch_user)
firewalls:
      dev:
          pattern: ^/(_(profiler|wdt)|css|images|js)/
          security: false
      main:
          anonymous: ~

          guard:
              authenticators:
                  - App\Security\TokenAuthenticator
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...