2014-01-21 51 views
3

我正在與器件的應用HWIOAuthBundle當loadUserByOAuthUserResponse()被調用HWIOAuthBundle

有一個源代碼

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

FOSUBUserProvider.php

有兩個函數相關的OAuth - 登錄

但是,我不知道何時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提供者重定向到您的頁面後調用。

相關問題