2014-01-21 9 views
3

творю Appication с HWIOAuthBundleКогда loadUserByOAuthUserResponse() вызывается в HWIOAuthBundle

Существует исходный код

https://gist.github.com/danvbe/4476697

FOSUBUserProvider.php

Есть две функции, связанные с OAuth - login

Однако, я не могу понять, когда FOSUBUserProvider.php является cal привело

и когда общественная функция loadUserByOAuthUserResponse называется

ли кто-нибудь мне помочь?

<?php 
namespace danvbe\UserBundle\Security\Core\User; 

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(); 
     $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->setUsername($username); 
      $user->setEmail($username); 
      $user->setPassword($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

Эта статья http://m2mdas.github.io/blog/2013/11/21/integrate-hwioauthbundle-with-fosuserbundle/ полезна для интеграции fosUserBundle с HwiOauthBundle –

ответ

4

loadUserByOAuthUserResponse вызывается после того, как пользователь перенаправляется обратно от поставщика OAuth на вашей странице.