Метод getPassword
Метод getPassword принадлежит интерфейсу
PasswordAuthenticatedUserInterface. Он возвращает
хешированный пароль пользователя, который Symfony
использует для проверки учётных данных при входе.
Метод не принимает параметров и возвращает строку
или null, если пароль не задан.
Синтаксис
public function getPassword(): ?string
Пример
Давайте реализуем интерфейс в сущности пользователя
и вернём хешированный пароль из свойства password:
<?php
namespace AppEntity;
use DoctrineORMMapping as ORM;
use SymfonyComponentSecurityCoreUserPasswordAuthenticatedUserInterface;
use SymfonyComponentSecurityCoreUserUserInterface;
#[ORMEntity(repositoryClass: UserRepository::class)]
class User implements UserInterface, PasswordAuthenticatedUserInterface
{
#[ORMId]
#[ORMGeneratedValue]
#[ORMColumn(type: 'integer')]
private ?int $id = null;
#[ORMColumn(type: 'string', length: 180, unique: true)]
private string $email = '';
#[ORMColumn(type: 'string')]
private string $password = '';
public function getId(): ?int
{
return $this->id;
}
public function getEmail(): string
{
return $this->email;
}
public function setEmail(string $email): self
{
$this->email = $email;
return $this;
}
public function getUserIdentifier(): string
{
return $this->email;
}
public function getPassword(): ?string
{
return $this->password;
}
public function setPassword(string $password): self
{
$this->password = $password;
return $this;
}
public function getRoles(): array
{
return ['ROLE_USER'];
}
public function eraseCredentials(): void
{
}
}
?>
Пример
Давайте создадим пользователя, захешируем пароль
и проверим его через метод getPassword:
<?php
namespace AppController;
use AppEntityUser;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentPasswordHasherUserPasswordHasherInterface;
use SymfonyComponentRoutingAttributeRoute;
class UserController extends AbstractController
{
#[Route('/user/create', name: 'user_create')]
public function create(UserPasswordHasherInterface $hasher): Response
{
$user = new User();
$user->setEmail('user');
$hashed = $hasher->hashPassword($user, 'abcde');
$user->setPassword($hashed);
return new Response($user->getPassword());
}
}
?>
Результат выполнения кода:
"$2y$13$abcdefghijklmnopqrstuv"
Пример
Давайте проверим, что возвращённый методом
getPassword хеш соответствует исходному паролю:
<?php
namespace AppController;
use AppEntityUser;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentPasswordHasherUserPasswordHasherInterface;
use SymfonyComponentRoutingAttributeRoute;
class UserController extends AbstractController
{
#[Route('/user/verify', name: 'user_verify')]
public function verify(UserPasswordHasherInterface $hasher): Response
{
$user = new User();
$user->setEmail('user');
$hashed = $hasher->hashPassword($user, 'abcde');
$user->setPassword($hashed);
$valid = $hasher->isPasswordValid($user, 'abcde');
return new Response($valid ? 'hello' : 'user');
}
}
?>
Результат выполнения кода:
"hello"
Смотрите также
-
интерфейс
PasswordAuthenticatedUserInterface,
который обязывает реализовать метод getPassword -
интерфейс
UserInterface,
который описывает базовые методы пользователя -
сервис
UserPasswordHasher,
который хеширует и проверяет пароли -
метод
isPasswordValid,
который проверяет пароль по хешу