Спасибо! :)

Завершаем аутентификацию для бэкенда. Доделаем нюансы, не реализованные ранее.
Сначала добавим роль в JWT. Потом напишем генератор токенов для E2E тестов. И сделаем форсированное разлогинивание пользователя и автоочистку устаревших кодов из БД по Cron в Docker Swarm.
Чтобы не пропускать новые эпизоды подпишитесь на наш канал @deworkerpro в Telegram

Спасибо! :)
Добрый день, подскажите пожалуйста. С вчерашнего дня перестали собираться образы php-cli-alpine и php-fpm-alpine. Выдает ошибку
make: /bin/sh: Operation not permitted make: *** [Makefile:209: pdo_pgsql.lo] Error 127
Такая ошибка есть в обсуждении alpine но, как ее решить так и не понял. ubuntu - 20 docker - version 19.03.12, docker-compose version 1.26.2.
Подскажите как можно решить эту проблем ку.
Попробовал все пересобрать на Mac (Docker: v.20.10.7, Compose: v.2.0.0-b6) - полет норм.
Возможно не связано с вашей ошибкой, но сборка могла упасть из-за обновления :latest версии базового образа на docker hub, также на прошлой неделе наткнулся что старая версия образа была полностью удалена из реестра. Попробуйте собрать с другой версией базового образа.
Обновите Docker до версии 20.
Добрый вечер.
А как это правильно сделать?
Есть playbook upgrade, но после запуска версия docker не обновляется. ОС Debian 10
Проверьте имя дистрибутива в /etc/apt/sources.list.d/docker.list
Должен быть buster, как мы сделали в следующем эпизоде.
В upgrade.yml
repo: deb [arch=amd64] https://download.docker.com/linux/debian stretch stable
В /etc/apt/sources.list.d/docker.list
deb [arch=amd64] https://download.docker.com/linux/debian stretch stable
deb [arch=amd64] https://download.docker.com/linux/debian stretch latest
Если в upgrade.yml заменить на buster?
Поменял в upgrade.yml, в файл docker.list добавилась строка
deb [arch=amd64] https://download.docker.com/linux/debian buster latest
Но и старые строки остались. Это может вызвать конфликт в будущем?
Конфликта не будет. Но можно удалить.
Благодарю.
Добрый день, Дмитирий.
Не совсем понятно со сменой роли пользователя.
Как я понял, если админ меняет роль для пользователя, то пользователь какое-то время ещё пользуется старой ролью.
Почему в этом случае не разлогинивать пользователя принудительно?
Потому что без хождения в БД при валидации нет возможности разлогинить JWT принудительно.
Получается, что пока пользователь не обратиться к БД - ничего не будет?
В этом суть JWT вместо токенов в БД, что в JWT токену мы всегда верим на слово.
В принимающем коде мы в токене с {user_id, role, expires, sign} проверяем только подпись и срок. Если подпись сошлась срок не истёк, то токен рабочий.
Поэтому у нас чисто физически нет способа "разлогинить" уже выданный конкретный JWT токен.
Добрый день.
Подскажите, как в api правильно оформить запрос к контроллеру, который отвечает за авторизацию через социальные сети?
И, если есть api контроллеры, но нет смысла оставлять старую web-авторизацию?
Можно через серию редиректов вроде:
frontend > api/authorize/fb > facebook > api/callback/fb > frontend
То есть в API сделать контроллер, который редиректит на соцсеть. И с фронтенда редиректить на него вроде api/authorize/fb?state=xyz. Потом при возврате из соцсети на callback-контроллер в нём добавлять пользователя и уже как обычно редиректить с одноразовым кодом authorization_code обратно на фронтенд.
Вопрос не совсем в тему.
Подскажите, в каком эпизоде Вы объясняете CORS заголовки для config ngix?
Я имею ввид это
Сами заголовки объясняю в отдельной серии по HTTP.
А в этих видео Вы нигде дополнительно не объясняете?
Просто добавляем их в 50-ом эпизоде.
Благодарю.
И ещё вопрос не в тему)
У меня проблема с functional тестами, при проверке api контроллера, регистрация. Тест не проходит, так как идёт отправка уведомления пользователю.
Как отключить в тестах отправку уведомлений?
Где-то, в Ваших видео, говорилось об этом, но никак не могу найти)
Не отключать, а просто отправлять письма в mailhog.
На локальном так и есть, тесты проходят.
Но при try-testing из всех именно этот тест отваливается.
public function testSuccess(): void
{
$this->client->request('POST', self::URI, [], [], ['CONTENT_TYPE' => 'application/json'], json_encode([
'first_name' => 'Jon',
'last_name' => 'Do',
'email' => 'signup@test.com',
'password' => 'password',
]));
self::assertEquals(201, $this->client->getResponse()->getStatusCode());
self::assertJson($content = $this->client->getResponse()->getContent());
$data = json_decode($content, true);
self::assertEquals(['Check your email.'], $data);
}
Хотя в .env.test я определил env переменные для mail
MAILER_URL=smtp://mailer:1025
MAILER_FROM_EMAIL=test@test.com
MAILER_FROM_NAME=test
Пока не совсем понял, как добавить пользователя и одноразовый код authorization?
Callback-контроллер нужно указать в настройках самого facebook?
Пока не совсем понял, как добавить пользователя и одноразовый код authorization?
В будущих эпизодах сделаем.
Callback-контроллер нужно указать в настройках самого facebook?
Да. В разделе разработчика у соцсети при добавлении oAuth приложения указываем обратный адрес для редиректа.
В будущих эпизодах сделаем.
Эх...
Ну что же, будем ждать)
В demo-manager Вы тоже используете jwt токены или там чуть другой подход?
Для API там подключаем бандл trikoder/oauth2-bundle, который внутри использует этот же league/oauth2-server.
Получается, что это те же jwt токены?
Сам бандл устарел. Как я понимаю, можно взять пример работы с токенами в этом проекте и подключить к проекту demo-manager?
Да. Можно подсмотреть, как это было сделано в бандле.
Благодарю за подсказки.
Сейчас использую такой код для авторизации на сайте.
public function login(AuthenticationUtils $authenticationUtils): Response
{
$error = $authenticationUtils->getLastAuthenticationError();
$lastUser = $authenticationUtils->getLastUsername();
return $this->render('app/auth/login.html.twig', ['last_username' => $lastUser, 'error' => $error]);
}
Как передать данные через api к этому действию я понимаю, но как теперь получить ответ, что пользователь авторизован или получить ошибки.
Код основан на Вашем примере из demo-manager.
я так понимаю валидацию формы входа не стали делать
Можно при желании добавить валидацию email. Если для регистрации валидация критична, то для входа это малополезно.
Здесь ошибка в условии?
public function removeAllForUser(string $userId): void
{
$this->em->createQueryBuilder()
->delete(RefreshToken::class, 'rt')
->andWhere('rt.userIdentifier < :user_id')
->setParameter(':user_id', $userId)
->getQuery()->execute();
}
Дмитрий, вы в этом уроке добавили к проекту запуск скрипта по крону через crazymax/swarm-cronjob которое работает в Docker Swarm. А не подскажите, что вы используете когда вам нужно использовать крон в docker compose(без Swarm)?
Исправьте, пожалуйста. Видео не доступно.
Возможно в вашем браузере из-за строгих настроек безопасности не передается referrer и плеер не понимает, на каком сайте он запускается.
Спасибо!