В данном уроке рассмотрен механизм аутентификации и авторизации с помощью JSON Web Tokens (JWT) токена на примере фреймворка Symfony 6 Telegram: t.me/alejandro... Уроки, менторство - boosty.to/sash...
Схоже на нових версіях бібліотек треба по іншому конфігурувати, після даунгдейду до версій як у Олександра все запрацювало, а на актуальних - нічого не працює, починаючи з пустих міграцій і навіть якщо їх закинути вручну - то тести все одно падають з помилками, каже що не бачить такої таблиці хоча вона є, при тому що інші тести відпрацьовують ``` bash-5.1$ php bin/phpunit PHPUnit 9.6.10 by Sebastian Bergmann and contributors. Testing ...[critical] Uncaught PHP Exception Doctrine\DBAL\Exception\TableNotFoundException: "An exception occurred while executing a query: SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "refresh_tokens" does not exist LINE 1: ...ername_2, t0.valid AS valid_3, t0.id AS id_4 FROM refresh_to... ^" at /var/www/vendor/doctrine/dbal/src/Driver/API/PostgreSQL/ExceptionConverter.php line 71 E.. 6 / 6 (100%) Time: 00:14.388, Memory: 38.00 MB ``` схоже що спочатку потрібно мені розібратися із базою сімфоні
Большое спасибо за уроки! Единственное, что осталось неясно - почему нужно регистрировать контроллер для /users/me? По какой причине HealthCheck отрабатывал без дополнительной регистрации? UPD. И почему в консольной команде используется фабрика, а не команда, созданная на прошлом уроке?
Спасибо за уроки! src/Shared/Domain/Security/AuthUserInterface.php AuthUserInterface зависит от Symphony/Component/Security/Core/User/UserInterface. Получается, что доменный слой имеет какие-то внешние зависимости от фреймворка)
Да. С интерфейсами все сложно. Можно упороться и вынести функционал атворизации в отдельный модуль ради архитектурной концепции, написать свой провайдер и хэшер. И скрыть в итоге эту горечь. Но в данном случае это только добавит технической сложности и мы не сильно выиграем придеживаясь жестких ограничений. Да и видео получилось бы слишком раздутым и непонятным :) Мы попробуем причесать код в рамках урока, когда будем выносить функционал авторизации в отдельный микросервис. Но пока ... Как миниммум мы понизили связанность с фреймворком на уровне отдельного интерфейса. Было бы хуже дабавлять интерфейс фоеймворка прямо в Entity. Вообще с интерфейсами и структурами стоит соблюдать баланс, чтобы не певратилось в горе о ума :) Если мы отходим от постулатов и дейстительно выигрываем в плане эффективности и скорости разработки, при этом по возможности снизив связанность с фрейморком, скорее всего, это разумный путь :)
А если есть соседний контекст (говоря про DDD), в котором происходит работа, например с постами И нужно получить список постов, которые соответствуют авторизованному пользователю, то как передать информацию о авторизованном пользователе в этот соседний контекст?
Если обращение к контексту с постами идет из соседнего контекста, то следует передавать идентификатор пользователя через предохранительный уровень (Anticorruption Layer). Это может быть адаптер к модулю постов. И в адаптере метод getPostsByUser(userId).
Спасибо за урок. Но. если честно, AuthUserInterface в домене наследоваться от симфони эт не верный подход. Как я понял мб эт для простоты конечно. Но вот setPassword с хешем, эт как-то перебор с нарушением ООП. В целом, хочется побольше твоих видео глянуть, т.к. годной инфы по ДДД мало. Да и не каждый пытается выстроить такую архитектуру. За это тоже отдельное спасибо!
у меня была 500 пока не выполнил команду make jwt (что бы шифрование начало работать), и надо не забыть сделать make db_migrate (что бы была БД со списком пользователей)