2014-05-31 5 views
0

Я следовал примеру here, чтобы добавить HWIOAuthBundle после борьбы с документацией. Я просто перенаправляюсь в Google, но когда он возвращается, я получаю предупреждение о том, что первый параметр отсутствует.Пытаться ввести параметры в пользовательский OAuthUserProvider

config.yml

services: 
    wxexchange_oauth_user_provider: 
     class:  WX\ExchangeBundle\Service\OAuthUserProvider 
     arguments: [@session, @doctrine, @service_container] 
hwi_oauth: 
    resource_owners: 
     google: 
      type:    google 
      client_id:   xxxxxx 
      client_secret:  xxxxx 
      scope:    "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile" 
     user_response_class: \WX\ExchangeBundle\Service\OAuthUserProvider 
    firewall_name:    main 

security.yml

providers: 
    my_custom_hwi_provider: 
     id: wxexchange_oauth_user_provider 

firewalls: 
    main: 
     pattern: ^/ 
     anonymous: ~ 
     provider: main 
     form_login: 
      check_path: login_check 
      login_path: /Login 
      csrf_provider: form.csrf_provider 
     logout: 
      path: logout 
     oauth: 
      resource_owners: 
       facebook:   "/Login/OAuth/check-facebook" 
       google:    "/Login/OAuth/check-google" 
      login_path:  /Login/OAuth 
      use_forward:  false 
      failure_path:  /Login 
      oauth_user_provider: 
       service: wxexchange_oauth_user_provider 

routing.yml

hwi_oauth_login: 
    resource: "@HWIOAuthBundle/Resources/config/routing/login.xml" 
    prefix: /Login/OAuth 

hwi_oauth_connect: 
    resource: "@HWIOAuthBundle/Resources/config/routing/connect.xml" 
    prefix: /Login/OAuth 

hwi_oauth_redirect: 
    resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml" 
    prefix: /Login/OAuth 

google_login: 
    pattern: /Login/OAuth/check-google 

facebook_login: 
    pattern: /Login/OAuth/check-facebook 

OAuthUserProvider.php

class OAuthUserProvider extends BaseOAuthUserProvider 
{ 
    protected $session, $doctrine, $admins; 
    public function __construct($session, $doctrine, $service_container) 
    { 
     $this->session = $session; 
     $this->doctrine = $doctrine; 
     $this->container = $service_container; 
    } 
    public function loadUserByUsername($username) 
    { 
     //code 
    } 
    public function loadUserByOAuthUserResponse(UserResponseInterface $response) 
    { 
     //code 
    } 
} 

Ошибка:

Warning: Missing argument 1 for WX\ExchangeBundle\Service\OAuthUserProvider::__construct(), called in /opt/lampp/htdocs/workoutexchange/trunk/WorkoutExchange/vendor/hwi/oauth-bundle/HWI/Bundle/OAuthBundle/OAuth/ResourceOwner/AbstractResourceOwner.php on line 186 and defined in /opt/lampp/htdocs/workoutexchange/trunk/WorkoutExchange/src/WX/ExchangeBundle/Service/OAuthUserProvider.php on line 13

+0

'Аргументы: [[@session, @doctrine, @service_container]' ... есть ** ** две фигурные скобки открытия '[[ 'в коде вопроса. Означает ли это вашу реальную конфигурацию или это была ошибка копирования/вставки? – nifr

+0

Ошибка копирования пасты ... Мне жаль, что это не было так просто. –

ответ

0

Эта строка в разделе services: в config.yml неправильно:

user_response_class: \WX\ExchangeBundle\Service\OAuthUserProvider 

См the configuration reference here. Я не уверен, что это должно быть (Google Oauth example не упоминает об этом), но я думаю, что это должен быть простой объект значения, а не ваш пользовательский провайдер.

+0

Это, конечно, ... спасибо. –

0

Я долгое время боролся с этой ошибкой.

providers: 
--->>>my_custom_hwi_provider: 
---->>>>>>> id: wxexchange_oauth_user_provider 

Прокомментировать эти две строки. Вы объявляете службу в разделе брандмауэра. Вам не нужно объявлять его как поставщика.

После этого вы проблема будет решена ...

firewalls: 
........ 
     oauth: 
      resource_owners: 
       facebook:   "/Login/OAuth/check-facebook" 
       google:    "/Login/OAuth/check-google" 
      login_path:  /Login/OAuth 
      use_forward:  false 
      failure_path:  /Login 
      oauth_user_provider: 
       service: wxexchange_oauth_user_provider