Класс Passport
Класс Passport является центральным объектом
в системе аутентификации Symfony. Он хранит
информацию о пользователе (бейджи) и учётные
данные (credentials), которые необходимы для
проверки подлинности. Объект Passport
создаётся внутри аутентификатора и возвращается
из метода authenticate. Далее этот объект
передаётся менеджеру аутентификации, который
извлекает из него бейджи и выполняет проверки.
Синтаксис
use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
$passport = new Passport(UserBadge $userBadge, array $badges = []);
Пример
Давайте создадим объект Passport с бейджем
пользователя и бейджем CSRF-токена:
<?php
namespace App\Security;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge;
class ApiAuthenticator
{
public function authenticate(Request $request): Passport
{
$userBadge = new UserBadge('abcde');
$csrfBadge = new CsrfTokenBadge('authenticate', 'abcde');
return new Passport($userBadge, [$csrfBadge]);
}
}
?>
В данном примере создаётся паспорт с
идентификатором пользователя 'abcde' и
бейджем CSRF-токена. Такой паспорт затем
передаётся менеджеру безопасности для
дальнейшей обработки.
Пример
Давайте проверим, содержит ли паспорт определённый бейдж:
<?php
namespace App\Security;
use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\RememberMeBadge;
$userBadge = new UserBadge('user');
$rememberMeBadge = new RememberMeBadge();
$passport = new Passport($userBadge, [$rememberMeBadge]);
$res = $passport->hasBadge(RememberMeBadge::class);
echo $res ? 'true' : 'false';
?>
Результат выполнения кода:
"true"
Метод hasBadge возвращает true, если
бейдж указанного класса присутствует в паспорте,
и false в противном случае.