2015-03-12 9 views
0

Я пытаюсь интегрировать FOSUserBundle с HWIBundle, чтобы добавить социальные подключения к моему приложению. FOSUser работает отлично, но у меня проблема с интеграцией с HWIOAuthBundle.Мое приложение Synfony2 не может разрешить зависимость службы

Связки загружаются в AppKernel, отлично.

Это мой config.yml

hwi_oauth: 
    connect: 
     account_connector: my_user_provider 
    firewall_name: name 
    fosub: 
     username_iterations: 30 
     properties: 
      facebook: facebook_id 
      google: google_id 
    resource_owners: 
     facebook: 
      type:    facebook 
      client_id:   "%facebook_app_id%" 
      client_secret:  "%facebook_app_secret%" 
      scope:    "" 
     google: 
      type:    google 
      client_id:   "%google_app_id%" 
      client_secret:  "%google_app_secret%" 
      scope:    "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile" 

Это мой security.yml:

security: 
encoders: 
    FOS\UserBundle\Model\UserInterface: sha512 

role_hierarchy: 
    ROLE_ADMIN:  ROLE_USER 
    ROLE_SUPER_ADMIN: ROLE_USER 

providers: 
    fos_userbundle: 
     id: fos_user.user_provider.username_email 

firewalls: 
    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 

    main: 
     pattern: ^/ 
     form_login: 
      provider: fos_userbundle 
      csrf_provider: form.csrf_provider 
      login_path: /login 
      check_path: /login_check 
     oauth: 
      resource_owners: 
       facebook:   "/login/check-facebook" 
       google:    "/login/check-google" 
      login_path:  /login 
      failure_path:  /login 

      oauth_user_provider: 
       service: my_user_provider 
     logout:  true 
     anonymous: true 

    login: 
     pattern: ^/login$ 
     security: false 

     remember_me: 
      key: "%secret%" 
      lifetime: 31536000 # 365 days in seconds 
      path:/
      domain: ~ # Defaults to the current domain from $_SERVER 

access_control: 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/backend/, role: ROLE_ADMIN } 

Это узелок services.yml

parameters: 
    my_user_provider.class: Main\SiteBundle\Services\FOSUBUserProvider 

services: 
    my_user_provider: 
     class: "%my_user_provider.class%" 
     arguments: [@fos_user.user_manager,{facebook: facebook_id, google: google_id}] 

И это служба :

namespace Main\SiteBundle\Services; 

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; 
    } 

} 

Да, это ошибка я получаю в браузере:

ServiceNotFoundException в CheckExceptionOnInvalidReferenceBehaviorPass.php линии 58: Служба "hwi_oauth.security.oauth_utils" имеет зависимость от не- существует сервис "hwi_oauth.resource_ownermap.name".

Хотя делать "обновление композитор" Я получаю

[Symfony \ Component \ внедрение зависимости \ Exception \ ServiceNotFoundException] услуга "hwi_oauth.security.oauth_utils" имеет зависимость от не -устойчивая служба «hwi_oauth.resource_ownermap.name».

Script Sensio \ Bundle \ DistributionBundle \ композитор \ ScriptHandler :: ClearCache обработки после обновления-CMD событие прекращается с исключением

[RuntimeException] Произошла ошибка при выполнении «'кэш: ясный --no-warmup ".

+0

Вы предоставили много кода, и это круто, но, пожалуйста, предоставьте также информацию о проблеме. Сообщение об ошибке/исключении, журналы и т. Д. Только то, что говорит вам, что что-то не так. –

ответ

1

В config.yml вы настроили hwi_oauth с именем «firewall_name: name».

Но в security.yml у вас нет брандмауэра с этим именем «имя» (но у вас есть «главный» именованный брандмауэр, не упомянутый в hwi_oauth в config.yml). Это вызывает сообщение об ошибке.