John Davidson

php - Call UserPasswordEncoderInterface encodePassword in DoctrineMigrations

0 comments
Message:


I am trying to encode a password with the encodePassword function from Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface; inside my migration here is my code
I tried with implements UserPasswordEncoderInterface but i did not manage to use this method encodePassword


The error is



Call to a member function encodePassword() on null



<?php

declare(strict_types=1);

namespace DoctrineMigrations;

use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
use Ramsey\Uuid\Uuid;
use App\Entity\User;


/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20201112164728 extends AbstractMigration
{
/**
* @var UserPasswordEncoderInterface
*/
private $encoder;


public function getPassword($password)
{
$user = new User();
return $this->encoder->encodePassword($user,$password);
}


public function getDescription(): string
{
return '';
}


public function up(Schema $schema): void
{

}

public function postUp(Schema $schema): void
{
$this->connection->insert('users', [
'id' => Uuid::uuid4(),
'email' => '[email protected]',
'password' => $this->getPassword('foo'),

]);
}

public function down(Schema $schema): void
{


}

}


My Answer:
To use the `encodePassword` method from `UserPasswordEncoderInterface` in your migration, you need to inject an instance of `UserPasswordEncoderInterface` into your migration class. Here's how you can modify your migration class to achieve this:

php

declare(strict_types=1);

namespace DoctrineMigrations;

use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
use Ramsey\Uuid\Uuid;
use App\Entity\User;

/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20201112164728 extends AbstractMigration
{
/**
* @var UserPasswordEncoderInterface
*/
private $encoder;

public function __construct(UserPasswordEncoderInterface $encoder)
{
$this->encoder = $encoder;
}

public function getPassword($password)
{
$user = new User();
return $this->encoder->encodePassword($user, $password);
}

public function getDescription(): string
{
return '';
}

public function up(Schema $schema): void
{

}

public function postUp(Schema $schema): void
{
$this->connection->insert('users', [
'id' => Uuid::uuid4(),
'email' => 'example@example.com',
'password' => $this->getPassword('foo'),
]);
}

public function down(Schema $schema): void
{

}
}


In this modified version of your migration class, we added a constructor that accepts an instance of `UserPasswordEncoderInterface` and assigns it to the private property `$encoder`. This way, you can use the `encodePassword` method in your migration methods. Make sure to pass an instance of `UserPasswordEncoderInterface` when creating an instance of this migration class.

Rate this post

5 of 5 based on 1120 votes

Comments




© 2024 Hayatsk.info - Personal Blogs Platform. All Rights Reserved.
Create blog  |  Privacy Policy  |  Terms & Conditions  |  Contact Us