/**
  * Populate the security token with a user from the local database.
  *
  * @param GetUserForTokenEvent $event
  */
 public function onGetUser(GetUserForTokenEvent $event)
 {
     $userProvider = $event->getUserProvider();
     if (!$userProvider instanceof OAuthUserProviderInterface) {
         return;
     }
     $token = $event->getToken();
     if ($user = $userProvider->loadUserByOAuthCredentials($token)) {
         $token->setUser($user);
     }
 }
 /**
  * {@inheritDoc}
  */
 public function authenticate(TokenInterface $token)
 {
     if (!$this->supports($token)) {
         return null;
     }
     $user = $token->getUser();
     if (!$user instanceof UserInterface && null !== $this->dispatcher) {
         $event = new GetUserForTokenEvent($token);
         $event->setUserProvider($this->userProvider);
         $this->dispatcher->dispatch(OAuthEvents::USER, $event);
         $user = $event->getToken()->getUser();
     }
     if (!$user instanceof UserInterface) {
         throw new BadCredentialsException('No user found for given credentials.');
     }
     $this->userChecker->checkPostAuth($user);
     $authenticatedToken = new OAuthToken($this->providerKey, $user->getRoles());
     $authenticatedToken->setAccessToken($token->getAccessToken());
     $authenticatedToken->setService($token->getService());
     $authenticatedToken->setUid($token->getUid());
     $authenticatedToken->setAuthenticated(true);
     $authenticatedToken->setUser($user);
     return $authenticatedToken;
 }