Symfony’de bir kullanıcının parolasını değiştirmek için bir konsol komutu oluşturabilirsiniz. Aşağıda, Symfony 7’de bir kullanıcı için parola değiştirme komutunun nasıl yazılacağını gösteren bir örnek bulunmaktadır:
1. Komut Sınıfını Oluştur
src/Command dizinine aşağıdaki gibi bir komut sınıfı ekleyin:
<?php
namespace App\Command;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\UserRepository;
#[AsCommand(
name: 'app:change-password',
description: 'Kullanıcı parolasını değiştirir.',
)]
class ChangePasswordCommand extends Command
{
private $userRepository;
private $passwordHasher;
private $entityManager;
public function __construct(UserRepository $userRepository, UserPasswordHasherInterface $passwordHasher, EntityManagerInterface $entityManager)
{
$this->userRepository = $userRepository;
$this->passwordHasher = $passwordHasher;
$this->entityManager = $entityManager;
parent::__construct();
}
protected function configure(): void
{
$this
->addArgument('email', InputArgument::REQUIRED, 'Kullanıcının e-posta adresi')
->addArgument('newPassword', InputArgument::REQUIRED, 'Yeni parola');
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$email = $input->getArgument('email');
$newPassword = $input->getArgument('newPassword');
$user = $this->userRepository->findOneBy(['email' => $email]);
if (!$user) {
$output->writeln('<error>Kullanıcı bulunamadı.</error>');
return Command::FAILURE;
}
$hashedPassword = $this->passwordHasher->hashPassword($user, $newPassword);
$user->setPassword($hashedPassword);
$this->entityManager->flush();
$output->writeln('<info>Parola başarıyla değiştirildi.</info>');
return Command::SUCCESS;
}
}
2. Komutu Kullanma
Komutu çalıştırmak için aşağıdaki gibi terminalden çalıştırabilirsiniz:
php bin/console app:change-password [email protected] yeni-parola
Açıklamalar
- UserRepository: Kullanıcıyı bulmak için gerekli.
- UserPasswordHasherInterface: Parolayı güvenli bir şekilde hashlemek için kullanılır.
- EntityManagerInterface: Veritabanı değişikliklerini kaydetmek için gerekli.
Komut başarıyla çalıştırıldığında belirtilen kullanıcının parolası değiştirilecektir.
