Impossible de câbler automatiquement PasswordHasherInterface
P粉154228483
P粉154228483 2023-12-13 15:55:26
0
1
502

J'essaie de câbler automatiquement l'interface PasswordHasher dans la classe Luminaires :

<?php
namespace AppDataFixtures;

use AppModelUserEntityUserEmail;
use AppModelUserEntityUserId;
use AppModelUserEntityUserRole;
use AppModelUserEntityUserUser;
use DoctrineBundleFixturesBundleFixture;
use DoctrinePersistenceObjectManager;
use SymfonyComponentPasswordHasherPasswordHasherInterface;

class UserFixture extends Fixture
{
    private PasswordHasherInterface $hasher;

    public function __construct(PasswordHasherInterface $hasher)
    {
        $this->hasher = $hasher;
    }
    
    public function load(ObjectManager $manager): void
    {
        $hash = $this->hasher->hash("password");

        $user = User::signUpByEmail(
            Id::next(),
            new DateTimeImmutable(),
            new Email("admin@app.test"),
            $hash,
            "token"
        );

        $user->confirmSignUp();

        $user->changeRole(Role::admin());

        $manager->persist($user);
        $manager->flush();
    }
}

Mais j'ai eu l'erreur :

Dans DefinitionErrorExceptionPass.php ligne 54 : ! !

!!Impossible de câbler automatiquement le service 'AppDataFixturesUserFixture' : paramètre '$hasher'

!!La méthode "__construct()" fait référence à l'interface "SymfonyComponentPasswordH

!!asherPasswordHasherInterface" mais aucun service de ce type n'existe. En avez-vous créé un

!!Une classe qui implémente cette interface ?

! !

Mon fichier services.yaml :

parameters:

services:
    # default configuration for services in *this* file
    _defaults:
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.

    # makes classes in src/ available to be used as services
    # this creates a service per class whose id is the fully-qualified class name
    App:
        resource: '../src/'
        exclude:
            - '../src/DependencyInjection/'
            - '../src/Model/User/Entity/'
            - '../src/Kernel.php'

Comment hacher des mots de passe simples dans Symfony 6.1 ? Pourquoi est-ce que j'obtiens cette erreur ?

P粉154228483
P粉154228483

répondre à tous(1)
P粉787820396

Il n’y a pas de solution universelle PasswordHasher.

Vous :

  • Utiliser une usine pour en générer une spécifique : par exempleSymfonyComponentPasswordHasherHasherPasswordHasherFactoryInterface
  • Ou vous utilisez une classe de hachage de mot de passe dédiée : par exemple SymfonyComponentPasswordHasherHasherUserPasswordHasherInterface pour l'utilisateur*.

En utilisant une usine, votre code ressemblera à ceci : (non testé)

//...
use Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactoryInterface;


class UserFixture extends Fixture
{
    private PasswordHasherFactoryInterface $passwordHasherFactory;

    public function __construct(PasswordHasherFactoryInterface $hasherFactory)
    {
      $this->passwordHasherFactory = $passwordHasherFactory;
    }
    
    public function load(ObjectManager $manager): void
    {
        $passwordHasher = $this->passwordHasherFactory->getPasswordHasher(User::class);
        $hash = $passwordHasher->hash("password");

        $user = User::signUpByEmail(
            Id::next(),
            new \DateTimeImmutable(),
            new Email("admin@app.test"),
            $hash,
            "token"
        );

        $user->confirmSignUp();

        $user->changeRole(Role::admin());

        $manager->persist($user);
        $manager->flush();
    }

Pour réitérer, les étapes sont :

  1. Installez le package : composer require symfony/password-hasher
  2. Configurer le hachage李>
  3. Charger le hachage

UserPasswordHasherInterface* : Un exemple du correctif se trouve ici

. 🎜
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal