symfonyfosuserbundlesonata-user-bundle

Argument #1 ($userProvider) must be of type ... UserProviderInterface


I have installed the Sonata User Bundle using the instructions. The process of loading user fixtures and clearing the cache work fine, but once I try to access an area requiring authentication in the browser, I get this exception:

Symfony\Component\Security\Core\Authentication\Provider\DaoAuthenticationProvider::__construct(): Argument #1 ($userProvider) must be of type Symfony\Component\Security\Core\User\UserProviderInterface, Sonata\UserBundle\Entity\UserManager given, called in /var/www/var/cache/dev/ContainerKw1JrEb/srcApp_KernelDevDebugContainer.php on line 7756

The exception is traced to:

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

... which is a constructor that looks like this:

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;
        ...

My fos_user.yaml file looks like this:

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

Does anyone know what I need to do in order to get things working?

(Note: I checked for duplicates, but while there are a couple questions that look similar, the error messages differ slightly from the one I'm seeing. Please double-check the wording instead of just immediately asking that this question be closed, as people are likely to google for my exception's specific wording.)


Solution

  • Which version of symfony are you using? The FosUserBundle is not compatible with symfony5, also the Sonata User bundle is ONLY compatible with symfony 4.4, which is almost end-of-life. I think you should walk a different path. Setting up your own user manager is not as difficult as you might think. See the recommendations on https://github.com/FriendsOfSymfony/FOSUserBundle#maintenance-status

    This tutorial might also help you in the right direction: https://symfonycasts.com/screencast/symfony5-security