首页 文章

为我的Web应用程序配置特定提供程序时出错

提问于
浏览
0

[Symfony \ Component \ Debug \ Exception \ ContextErrorException]可捕获的致命错误:传递给Symfony \ Component \ Security \ Core \ Authentication \ Provider \ SimpleAuthenticationProvider :: __ construct()的参数2必须实现接口Symfony \ Component \ Security \ Core \ User \ UserProviderInterface,Delivve \ WebBundle \ Service \ WebKeyUsersService实例,在第4611行的/home/delivve-webservice/app/cache/de_/ap_DevDebugProjectContainer.php中调用并定义

会发生什么事情,我有一个api工作,但现在我需要制作Web服务日志面或谷歌帐户,但上述错误,请按照本教程制作http://nyrodev.info/fr/posts/286/Connexions-OAuth-Multiple-avec-Symfony-2-3

OAuthMembersService.php文件中的apena包括useSymfony \ Bundle \ SecurityBundle \ DependencyInjection \ Security \ UserProvider \ UserProviderFactoryInterface;因为symfony抱怨没有这样的进口 .

1 回答

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

    服务

    services:
        web_key_user_provider:
            class: Delivve\WebBundle\Service\WebKeyUsersService
    

    安全

    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/
    

    config

    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
    

相关问题