OAuthBundle\Provider\UserProvider::loadUserByOAuthUserResponse PHP Метод

loadUserByOAuthUserResponse() публичный Метод

public loadUserByOAuthUserResponse ( HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface $response ) : mixed
$response HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface
Результат mixed
    public function loadUserByOAuthUserResponse(UserResponseInterface $response)
    {
        $tokenLoggedUser = $this->container->get('security.token_storage')->getToken();
        $oauthServiceName = $response->getResourceOwner()->getName();
        $oauthServiceUserId = $response->getUsername();
        $oauthServiceAccessToken = $response->getAccessToken();
        $user = $this->entityManager->getRepository('AppBundle:User')->findOneBy(array($oauthServiceName . '_id' => $oauthServiceUserId));
        $setter = 'set' . ucfirst($oauthServiceName);
        $setter_id = $setter . 'Id';
        $setter_token = $setter . 'AccessToken';
        if (null === $user) {
            if (null === $tokenLoggedUser) {
                throw new AccountNotLinkedException(sprintf('Not linked "%s" account could be found', $oauthServiceName));
            }
            $currentLoggedUser = $tokenLoggedUser->getUser();
            if (in_array('ROLE_ADMIN', $currentLoggedUser->getRoles())) {
                $currentLoggedUser->{$setter_id}($oauthServiceUserId);
                $currentLoggedUser->{$setter_token}($oauthServiceAccessToken);
                $this->entityManager->persist($currentLoggedUser);
                $this->entityManager->flush();
                $user = $this->entityManager->getRepository('AppBundle:User')->find($currentLoggedUser->getId());
                return $user;
            } else {
                throw new OAuthAwareException(sprintf('Only users with role "ROLE_ADMIN" can link OAuth accounts.', $oauthServiceName));
            }
        } else {
            $user->{$setter_token}($response->getAccessToken());
            $this->entityManager->persist($user);
            $this->entityManager->flush();
            return $user;
        }
    }