Quantcast
Channel: Active questions tagged symfony4 - Stack Overflow
Viewing all articles
Browse latest Browse all 3925

How to pass UserInterface as a parameter to the encodePassword function

$
0
0

I would like to know how to pass UserInterface as a parameter to the encodePassword function. Actually, when running the following command line php bin/console doctrine:fixtures:load , I got this message error:

Argument 1 passed to Symfony\Component\Security\Core\Encoder\UserPasswordEncoder::encodePassword() must be an instance of Symfony\Component\Security\Core\User\UserInterface, instance of App\Entity\User given,

These are my relevant files:

User.php :

<?phpnamespace App\Entity;use App\Repository\UserRepository;use Doctrine\ORM\Mapping as ORM;use Symfony\Component\Security\Core\User\UserInterface;use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;/** * @ORM\Entity(repositoryClass=UserRepository::class) * @UniqueEntity(fields="email", message="Un utilisateur existe déjà avec cet email.") */class User{    /**     * @ORM\Id     * @ORM\GeneratedValue     * @ORM\Column(type="integer")     */    private $id;    /**     * @ORM\Column(type="string", length=255)     */    private $nom;    /**     * @ORM\Column(type="string", length=255)     */    private $prenom;    /**     * @ORM\Column(type="text")     */    private $roles;    /**     * @ORM\Column(type="string", length=255)     */    private $email;    /**     * @ORM\Column(type="string", length=255)     */    private $password;    public function getId(): ?int    {        return $this->id;    }    public function getNom(): ?string    {        return $this->nom;    }    public function setNom(string $nom): self    {        $this->nom = $nom;        return $this;    }    public function getPrenom(): ?string    {        return $this->prenom;    }    public function setPrenom(string $prenom): self    {        $this->prenom = $prenom;        return $this;    }    public function getRoles(): ?string    {        return $this->roles;    }    public function setRoles(string $roles): self    {        $this->roles = $roles;        return $this;    }    public function getEmail(): ?string    {        return $this->email;    }    public function setEmail(string $email): self    {        $this->email = $email;        return $this;    }    public function getPassword(): ?string    {        return $this->password;    }    public function setPassword(string $password): self    {        $this->password = $password;        return $this;    }//    public function getRoles(){//        return [//            'ROLE_ADMIN'//        ];//    }    public function getSalt() {}    public function eraseCredentials() {}//    Some added code    public function serialize(){        return $this->serialize([            $this->id,            $this->email,            $this->password        ]);    }    public function unserialize($string){        list(            $this->id,            $this->email,            $this->password        ) = unserialize($string, ['allowed_classes' => false]);    }}

UserFixture.php :

<?phpnamespace App\DataFixtures;use App\Entity\User;use Doctrine\Bundle\FixturesBundle\Fixture;use Doctrine\Persistence\ObjectManager;use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;use Symfony\Component\Security\Core\User\UserInterface;class UserFixture extends Fixture{    private $encoder;    public function __construct(UserPasswordEncoderInterface $encoder)    {        $this->encoder = $encoder;    }    public function load(ObjectManager $manager): void    {        $user = new User();        $user->getNom('test');        $user->setPrenom('test');        $user->setRoles('["ROLE_ADMIN"]');        $user->setEmail('test@gmail.com');        $user->setPassword(            $this->encoder->encodePassword($user,'test')        );        $manager->persist($user);        $manager->flush();    }}

UserInterface.php :

<?php    /*     * This file is part of the Symfony package.     *     * (c) Fabien Potencier <fabien@symfony.com>     *     * For the full copyright and license information, please view the LICENSE     * file that was distributed with this source code.     */    namespace Symfony\Component\Security\Core\User;    use Symfony\Component\Security\Core\Role\Role;    /**     * Represents the interface that all user classes must implement.     *     * This interface is useful because the authentication layer can deal with     * the object through its lifecycle, using the object to get the encoded     * password (for checking against a submitted password), assigning roles     * and so on.     *     * Regardless of how your users are loaded or where they come from (a database,     * configuration, web service, etc.), you will have a class that implements     * this interface. Objects that implement this interface are created and     * loaded by different objects that implement UserProviderInterface.     *     * @see UserProviderInterface     *     * @author Fabien Potencier <fabien@symfony.com>     */    interface UserInterface    {        /**         * Returns the roles granted to the user.         *         *     public function getRoles()         *     {         *         return ['ROLE_USER'];         *     }         *         * Alternatively, the roles might be stored in a ``roles`` property,         * and populated in any number of different ways when the user object         * is created.         *         * @return array<Role|string> The user roles         */        public function getRoles();        /**         * Returns the password used to authenticate the user.         *         * This should be the encoded password. On authentication, a plain-text         * password will be salted, encoded, and then compared to this value.         *         * @return string|null The encoded password if any         */        public function getPassword();        /**         * Returns the salt that was originally used to encode the password.         *         * This can return null if the password was not encoded using a salt.         *         * @return string|null The salt         */        public function getSalt();        /**         * Returns the username used to authenticate the user.         *         * @return string The username         */        public function getUsername();        /**         * Removes sensitive data from the user.         *         * This is important if, at any given point, sensitive information like         * the plain-text password is stored on this object.         */        public function eraseCredentials();    }

UserPasswordEncoderInterface.php :

<?php/* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */namespace Symfony\Component\Security\Core\Encoder;use Symfony\Component\Security\Core\User\UserInterface;/** * UserPasswordEncoderInterface is the interface for the password encoder service. * * @author Ariel Ferrandini <arielferrandini@gmail.com> * * @method bool needsRehash(UserInterface $user) */interface UserPasswordEncoderInterface{    /**     * Encodes the plain password.     *     * @param string $plainPassword The password to encode     *     * @return string The encoded password     */    public function encodePassword(UserInterface $user, $plainPassword);    /**     * @param string $raw A raw password     *     * @return bool true if the password is valid, false otherwise     */    public function isPasswordValid(UserInterface $user, $raw);}

So, what's wrong in my code and how can I fix it. Any idea?


Viewing all articles
Browse latest Browse all 3925

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>