2014-11-15 11 views
3

В моем проекте я использую FOSUserBundle и HWIOAuthBundle для аутентификации пользователей. интегрированный HWIOAuthBundle с использованием этого tutorial. Но, кроме того, мне нужно получить понравившиеся пользователи. Я уже добавил user_likes в область действия, и когда я пытаюсь войти в систему facebook, я хочу получить понравившиеся пользователи, но как мне получить эти симпатии, например, в Службе. Возможно, в FOSUBUserProvider.php, который был создан в ссылке, приведенной выше.HWIOAuthBundle Symfony2 нравится пользователю Facebook

FOSUBUserProvider.php

<?php 
namespace Atotrukis\MainBundle\Service; 

use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface; 
use HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider as BaseClass; 
use Symfony\Component\Security\Core\User\UserInterface; 

class FOSUBUserProvider extends BaseClass 
{ 

    /** 
    * {@inheritDoc} 
    */ 
    public function connect(UserInterface $user, UserResponseInterface $response) 
    { 
     $property = $this->getProperty($response); 
     $username = $response->getUsername(); 

     //on connect - get the access token and the user ID 
     $service = $response->getResourceOwner()->getName(); 

     $setter = 'set'.ucfirst($service); 
     $setter_id = $setter.'Id'; 
     $setter_token = $setter.'AccessToken'; 

     //we "disconnect" previously connected users 
     if (null !== $previousUser = $this->userManager->findUserBy(array($property => $username))) { 
      $previousUser->$setter_id(null); 
      $previousUser->$setter_token(null); 
      $this->userManager->updateUser($previousUser); 
     } 

     //we connect current user 
     $user->$setter_id($username); 
     $user->$setter_token($response->getAccessToken()); 

     $this->userManager->updateUser($user); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function loadUserByOAuthUserResponse(UserResponseInterface $response) 
    { 
     $username = $response->getUsername(); 
     $email = $response->getEmail(); 
     $name = $response->getRealName(); 
     $user = $this->userManager->findUserBy(array($this->getProperty($response) => $username)); 
     //when the user is registrating 
     if (null === $user) { 
      $service = $response->getResourceOwner()->getName(); 
      $setter = 'set'.ucfirst($service); 
      $setter_id = $setter.'Id'; 
      $setter_token = $setter.'AccessToken'; 
      // create new user here 
      $user = $this->userManager->createUser(); 
      $user->$setter_id($username); 
      $user->$setter_token($response->getAccessToken()); 
      //I have set all requested data with the user's username 
      //modify here with relevant data 
      $user->setName($name); 
      $user->setUsername($email); 
      $user->setEmail($email); 
      $user->setPlainPassword($username); 
      $user->setEnabled(true); 
      $this->userManager->updateUser($user); 
      return $user; 
     } 

     //if user exists - go with the HWIOAuth way 
     $user = parent::loadUserByOAuthUserResponse($response); 

     $serviceName = $response->getResourceOwner()->getName(); 
     $setter = 'set' . ucfirst($serviceName) . 'AccessToken'; 

     //update access token 
     $user->$setter($response->getAccessToken()); 

     return $user; 
    } 

} 

ответ

0

Для вызова facebook API я использовать facebook sdk и, например, чтобы получить друзей, я добавил это в мой контроллер:

$user = $this->getUser(); 
    if ($user && $accessToken = $user->getFacebookAccessToken()) 
    { 
     $friends= []; 
     $userRepo = $this->getUserRepository(); 
     $session = new FacebookSession($accessToken); 
     $session->setDefaultApplication($this->container->getParameter('facebook_client_id'), $this->container->getParameter('facebook_client_secret')); 
     $friendsData = (new FacebookRequest(
       $session, 'GET', '/me/friends'))->execute()->getGraphObject()->asArray(); 
     foreach ($friendsData['data'] as $friendData) { 
      $friend = $userRepo->findOneByFacebookId($friendData->id); 
      if ($friend) { 
       $friends[] = $userRepo->findOneByFacebookId($friendData->id); 
      } 
     } 
     return array(
      'user' => $user, 
      'friends' => $friends 
     ); 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^