2015-06-30 8 views
0

[Symfony\Component\Debug\Exception\ContextErrorException]
Catchable Fatal Error: Argument 2 passed to Symfony\Component\Security\Core\Authentication\Provider\SimpleAuthenticationProvider::__construct() must implement interface Symfony\Component\Security\Core\User\UserProviderInterface, instance of Delivve\WebBundle\Service\WebKeyUsersService given, called in /home/delivve-webservice/app/cache/de_/ap_DevDebugProjectContainer.php on line 4611 and definedОшибка настройки конкретного провайдера для моего веб-приложения

Что происходит, так это то, что у меня есть api, который работает, но теперь мне нужно сделать страницу журнала веб-службы или учетную запись google, но эта ошибка выше, следуйте этому учебник, чтобы сделать http://nyrodev.info/fr/posts/286/Connexions-OAuth-Multiple-avec-Symfony-2-3

И АПЕНА в OAuthMembersService.php файл включает useSymfony \ Bundle \ SecurityBundle \ Security \ внедрение зависимости \ UserProvider \ UserProviderFactoryInterface; потому что symfony жаловался, что у него нет такого импорта.

+0

Что ваш вопрос? –

+0

Вы забыли эту реализацию интерфейса: класс WebKeyUsersService реализует UserProviderInterface – OIS

+0

Я UserProviderInterface это со следующим именем WebKeyUserProvider , если вы можете помочь мне, что я могу отправить код –

ответ

1

Я действительно сомнения

я реализовал следующие классы:

<?php 

namespace Delivve\WebBundle\Security; 

use HWI\Bundle\OAuthBundle\Security\Core\User\OAuthUser as BaseOAuthUser; 
use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface; 


class WebKeyUserProvider extends BaseOAuthUser { 

    protected $data; 

    public function __construct(UserResponseInterface $response) { 
     parent::__construct($response->getUsername()); 
     $this->data = array(
      'provider'=>$response->getResourceOwner()->getName(), 
      'providerId'=>$response->getUsername() 
     ); 
     $vars = array(
      'nickname', 
      'realname', 
      'email', 
      'profilePicture', 
      'accessToken', 
      'refreshToken', 
      'tokenSecret', 
      'expiresIn', 
     ); 
     foreach($vars as $v) { 
      $fct = 'get'.ucfirst($v); 
      $this->data[$v] = $response->$fct(); 
     } 
    } 

    public function getData() { 
     return $this->data; 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public function getRoles() { 
     return array('ROLE_OAUTH_USER'); 
    } 

} 


<?php 

namespace Delivve\WebBundle\Service; 

use Symfony\Bundle\SecurityBundle\DependencyInjection\Security\UserProvider\UserProviderFactoryInterface; 
use Symfony\Component\Config\Definition\Builder\NodeDefinition; 
use Symfony\Component\DependencyInjection\ContainerBuilder; 
use Symfony\Component\Security\Core\User\UserProviderInterface; 
use HWI\Bundle\OAuthBundle\Security\Core\User\OAuthAwareUserProviderInterface; 
use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface; 
use Delivve\WebBundle\Security\WebKeyUserProvider; 

class WebKeyUsersService implements UserProviderFactoryInterface, OAuthAwareUserProviderInterface { 

    public function loadUserByUsername($username) { 
     throw new Exception('loadByUsername not implemented'); 
    } 

    public function supportsClass($class) { 
     return $class === "Delivve\\WebBundle\\Security\\WebKeyUserProvider"; 
    } 


    public function refreshUser(\Symfony\Component\Security\Core\User\UserInterface $user) { 
     if (!$this->supportsClass(get_class($user))) { 
      throw new UnsupportedUserException(sprintf('Unsupported user class "%s"', get_class($user))); 
     } 
     return $user; 
    } 

    public function loadUserByOAuthUserResponse(UserResponseInterface $response) { 
     return new OAuthUser($response); 
    } 

    public function create(ContainerBuilder $container, $id, $config) 
    { 
     // TODO: Implement create() method. 
    } 

    public function getKey() 
    { 
     // TODO: Implement getKey() method. 
    } 

    public function addConfiguration(NodeDefinition $builder) 
    { 
     // TODO: Implement addConfiguration() method. 
    } 
} 

И это мои конфигурации:

routingSecurityOAuth.yml

hwi_oauth_login: 
    resource: "@HWIOAuthBundle/Resources/config/routing/login.xml" 
    prefix: /login 
hwi_oauth_redirect: 
    resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml" 
    prefix: /connect 
facebook_login: 
    pattern: /login/check-facebook 
google_login: 
    pattern: /login/check-google 
web_target: 
    pattern: /target 
    defaults: { _controller: DelivveWebBundle:Security:oauthTarget } 

служба

безопасности

security: 

    providers: 
     web_key_user_provider: 
      id: web_key_user_provider 

    firewalls: 
     web_key: 
      pattern: ^/web/* 
      anonymous: ~ 
      provider: web_key_user_provider 
      oauth: 
       resource_owners: 
        facebook: "/web/login/check-facebook" 
        google: "/web/login/check-google" 
#     linkedin: "/web/login/check-linkedin" 
       login_path: /web/login 
       failure_path: /web/login 
       check_path: /web/login_check 
       default_target_path: /web/target 
       oauth_user_provider: 
        service: web_key_user_provider 
     default: 
        anonymous: ~ 
    access_control: 
     - { path: ˆ/web/target, roles: ROLE_OAUTH_USER } 
     - { path: ˆ/web/, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

маршрутизации

web_key_register: 
    pattern: /webRegister 
    defaults: { _controller: DelivveWebBundle:Security:webRegister } 

web_key: 
    resource: "@DelivveWebBundle/Resources/config/routingSecurityOAuth.yml" 
    prefix: /web/ 

конфигурации

hwi_oauth: 
    firewall_name: web_key 
    resource_owners: 
     facebook: 
      type: facebook 
      client_id:  %facebook_client_id% 
      client_secret: %facebook_client_secret% 
      scope: email 
      infos_url: "https://graph.facebook.com/me?fields=username,name,email,picture.type(large)" 
      paths: 
       email:   email 
       profilepicture: picture.data.url 
      options: 
       display: popup 
     google: 
      type: google 
      client_id:  %google_client_id% 
      client_secret: %google_client_secret% 
      scope: "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile" 
      paths: 
       email:   email 
       profilepicture: picture