HWIOAuthBundle Symfony2 从 Facebook 获得用户喜欢



在我的项目中,我使用FOSUserBundle和HWIOAuthBundle进行用户身份验证。 使用本教程集成 HWIOAuthBundle。但除此之外,我需要获得用户的喜欢。我已经在范围内添加了user_likes,当我尝试登录Facebook时,说我想获得用户的喜欢,但是例如在服务中,我如何获得这些喜欢。也许在FOSUBUserProvider中.php它是在我上面提供的链接中创建的。

FOSUBUserProvider.php

<?php
namespace AtotrukisMainBundleService;
use HWIBundleOAuthBundleOAuthResponseUserResponseInterface;
use HWIBundleOAuthBundleSecurityCoreUserFOSUBUserProvider as BaseClass;
use SymfonyComponentSecurityCoreUserUserInterface;
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;
    }
}

要调用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
        );
    }

最新更新