当前位置: 首页 > 知识库问答 >
问题:

我的Synfony2应用无法解决服务依赖

路伟
2023-03-14

我正在尝试将FOSUserBundle与HWIBundle集成,以便将社交媒体连接添加到我的应用程序中。FOSUser工作得很好,但是我在与HWIOAuthBundle集成时遇到了一个问题。

捆绑包完全加载到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"

这是我的安全。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 }

这是我的捆绑服务。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;
    }

}

是的,这是我在浏览器中得到的错误:

第58行:服务hwi_oauth.security.oauth_utils依赖于不存在的服务hwi_oauth.resource_ownermap.name。

在做“作曲家更新”的时候,我明白了

[Symfony\Component\DependencyInject\Exc0019\ServiceNotFoundExc0019]服务hwi_oauth.security.oauth_utils依赖于不存在的服务hwi_oauth.resource_ownermap.name。

Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache处理更新后cmd事件时异常终止

[RuntimeException]执行“'cache:clear--no warmup'”命令时出错。

共有1个答案

储臻
2023-03-14

在配置中。yml您已将hwi_oauth配置为“防火墙名称:名称”。

但是在安全方面。yml您没有名为“name”的防火墙(但是您有一个名为“main”的防火墙,在config.yml的hwi_oauth中没有提到)。这会导致您收到错误消息。

 类似资料:
  • 问题内容: 我是基于注释编程的新手,并且不知道要为 org.springframework.transaction.annotation.Transactional 添加什么maven工件到我的pom.xml中,我用谷歌搜索(像搜索结果的前5页一样),但是找不到我在寻找。我使用的是Spring3。此外,如果有任何在线教程可以了解有关Spring注释的更多信息。谢谢!! 问题答案: 在spring-

  • 今天,由于配置问题,Android Studio停止正常同步。 无法解析配置的所有文件: app: ProviderRepositoryDebugCompileClasspath。找不到firebase-analytics-impl.aar(com.google.firebase: Firebase-Analytics-impl: 15.0.2)。在以下位置搜索:https://jcenter.b

  • 我已经浏览了许多关于类似问题的问题,但我找不到有效的解决方案。这可能是我对Android开发缺乏经验,但我不认为错误消息是那么清楚。我已经尝试过: 重建/清洁项目, 使缓存失效/重新启动、同步 带有 gradle 文件的项目, 我在设置中使用默认的 gradle 包装器, 有什么办法解决这个问题吗? 使用Android Studio版本:3.4.1 应用: 构建.gradle 项目:Build.g

  • 本文向大家介绍SQL Agent服务无法启动的解决方法,包括了SQL Agent服务无法启动的解决方法的使用技巧和注意事项,需要的朋友参考一下 问题现象 从阿里云上镜像过来的一台数据库服务器,SQL Agent服务启动不了,提示服务启动后停止。(原数据库服务器是正常的,怀疑跟镜像有关) 如下是系统日志和SQL Agent的日志 2016-05-20 11:09:03 - ? [100] Micro

  • 我对ivy没有解析我的一些依赖关系有问题。以下是我如何重现这个问题的: 我在eclipse中有一个空的java项目。我已经在我的项目中添加了ivy.xml: 这工作正常,ivy能够解决和下载口水。 如果我将修订版更改为6.3.0.Final(http://mvnrepository.com/artifact/org.drools/drools-core/6.3.0.Final),它将不起作用,我看

  • 我已经在Android Studio创建了下面的应用程序。在运行时,我收到以下发布的错误。我检查了build.gradle文件,但不知道有什么问题。 问题是,Android Studio给出了一个错误在R.布局,并说:不能解决符号R 代码: 格拉德尔。建造: 错误 更新:我将compileSdkVersion、targetSdkVersion设置为23,minSdkVersion=19 现在我得到