РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
583 of 1361 menu

Метод isPasswordValid

Метод isPasswordValid класса UserPasswordHasher проверяет, соответствует ли пароль в открытом виде хешу, хранящемуся у пользователя. Первым параметром передаётся объект пользователя, реализующий PasswordAuthenticatedUserInterface, вторым - пароль в открытом виде. Метод возвращает true, если пароль верный, и false в противном случае. Чаще всего метод используется в кастомном аутентификаторе при проверке учётных данных.

Синтаксис

public function isPasswordValid( PasswordAuthenticatedUserInterface $user, string $plainPassword ): bool

Пример

Давайте проверим, соответствует ли пароль 'abcde' хешу пользователя:

<?php namespace App\Controller; use App\Entity\User; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\PasswordHasher\UserPasswordHasherInterface; class AuthController extends AbstractController { public function check(UserPasswordHasherInterface $hasher): Response { $user = new User(); $user->setPassword( $hasher->hashPassword($user, 'abcde') ); $res = $hasher->isPasswordValid($user, 'abcde'); return new Response(var_export($res, true)); } } ?>

Результат выполнения кода:

true

Пример

Давайте проверим неверный пароль 'hello' для того же пользователя:

<?php namespace App\Controller; use App\Entity\User; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\PasswordHasher\UserPasswordHasherInterface; class AuthController extends AbstractController { public function check(UserPasswordHasherInterface $hasher): Response { $user = new User(); $user->setPassword( $hasher->hashPassword($user, 'abcde') ); $res = $hasher->isPasswordValid($user, 'hello'); return new Response(var_export($res, true)); } } ?>

Результат выполнения кода:

false

Пример

Давайте используем метод в кастомном аутентификаторе для проверки учётных данных пользователя:

<?php namespace App\Security; use App\Repository\UserRepository; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\PasswordHasher\UserPasswordHasherInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; class ApiAuthenticator { public function __construct( private UserRepository $users, private UserPasswordHasherInterface $hasher ) { } public function authenticate(Request $request): Response { $login = $request->get('login'); $password = $request->get('password'); $user = $this->users->findOneBy(['login' => $login]); if ($user === null) { throw new AuthenticationException('User not found'); } if (!$this->hasher->isPasswordValid($user, $password)) { throw new AuthenticationException('Invalid password'); } return new JsonResponse(['status' => 'ok']); } } ?>

Если пользователь с логином login существует и пароль совпадает - вернётся JSON '{"status":"ok"}'.

Смотрите также

  • класс UserPasswordHasher,
    который хеширует и проверяет пароли пользователей
  • метод hashPassword,
    который создаёт хеш пароля
  • интерфейс PasswordAuthenticatedUserInterface,
    который реализует пользователь с паролем
  • метод needsRehash,
    который проверяет необходимость перехеширования пароля
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить