【问题标题】:Argument #1 ($userProvider) must be of type ... UserProviderInterface参数 #1 ($userProvider) 的类型必须是 ... UserProviderInterface
【发布时间】:2021-10-30 09:36:53
【问题描述】:

我已按照说明安装了 Sonata User Bundle。加载用户设备和清除缓存的过程可以正常工作,但是一旦我尝试在浏览器中访问需要身份验证的区域,就会出现以下异常:

Symfony\Component\Security\Core\Authentication\Provider\DaoAuthenticationProvider::__construct(): 参数 #1 ($userProvider) 必须是类型 Symfony\Component\Security\Core\User\UserProviderInterface, Sonata\UserBundle\Entity\UserManager 给定,调用 /var/www/var/cache/dev/ContainerKw1JrEb/srcApp_KernelDevDebugContainer.php 在第 7756 行

异常追溯到:

vendor/symfony/security-core/Authentication/Provider/DaoAuthenticationProvider.php(第 35 行)

...这是一个如下所示的构造函数:

class DaoAuthenticationProvider extends UserAuthenticationProvider
{
    private $encoderFactory;
    private $userProvider;
    public function __construct(UserProviderInterface $userProvider, UserCheckerInterface $userChecker, string $providerKey, EncoderFactoryInterface $encoderFactory, bool $hideUserNotFoundExceptions = true)
    {
        parent::__construct($userChecker, $providerKey, $hideUserNotFoundExceptions);
        $this->encoderFactory = $encoderFactory;
        $this->userProvider = $userProvider;
        ...

我的fos_user.yaml 文件如下所示:

fos_user:
  db_driver: orm
  firewall_name: main
  user_class: App\Entity\User
  group:
    group_class:   FOS\UserBundle\Entity\Group
    group_manager: sonata.user.orm.group_manager

  from_email:
    address: "noreply@patrickmaynard.com"
    sender_name: "No Reply"

  service:
    user_manager: sonata.user.orm.user_manager

有人知道我需要做什么才能让事情正常进行吗?

(注意:我检查了重复项,但虽然有几个问题看起来相似,但错误消息与我看到的略有不同。请仔细检查措辞,而不是立即询问这个问题已关闭,因为人们可能会在谷歌上搜索我的例外的具体措辞。)

【问题讨论】:

  • 您是否尝试过实现adapter 服务以使 Sonata 的 UserManager 与 Symfony 的 UserProviderInterface 兼容,并提供此服务的 id 作为 fos_user.yamluser_manager 的值(而不是默认sonata.user.orm.user_manager服务ID)?
  • 这似乎已经成功了。如果你把这个作为答案,我会给你赏金。

标签: symfony fosuserbundle sonata-user-bundle


【解决方案1】:

您使用的是哪个版本的 symfony? FosUserBundle 与 symfony5 不兼容,Sonata User 包也仅与 symfony 4.4 兼容,后者几乎报废。我认为你应该走一条不同的路。设置您自己的用户管理器并不像您想象的那么困难。查看https://github.com/FriendsOfSymfony/FOSUserBundle#maintenance-status上的建议

本教程也可能会帮助您朝着正确的方向前进: https://symfonycasts.com/screencast/symfony5-security

【讨论】:

    猜你喜欢
    • 2022-12-16
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2014-02-06
    • 2017-10-01
    • 1970-01-01
    • 2021-12-14
    • 2020-11-09
    相关资源
    最近更新 更多