Регистрация через социальные сети

Реализация команды регистрации через социальные сети. Именованные конструкторы объектов. Привязка соцсети к текущему профилю.

  • 00:00:38 Юзкейс JoinByNetwork
  • 00:01:52 Именованные конструкторы
  • 00:03:02 Конструкторы для регистрации по email
  • 00:04:22 Команда регистрации по соцсети
  • 00:04:53 Объект-значение Network
  • 00:06:09 Сценарий регистрации
  • 00:07:24 Метод регистрации
  • 00:08:36 Возврат массива вместо коллекции
  • 00:09:50 Добавление ещё одного идентификатора
  • 00:11:48 Метод добавления
  • 00:13:04 Сравнение объектов-значений
  • 00:14:12 Обзор архитектуры модуля
  • 00:16:12 Что будет дальше
  • 00:16:43 Про валидацию ввода
Скрытый контент (код, слайды, ...) для подписчиков. Открыть →
Дмитрий Елисеев
elisdn.ru
Комментарии (22)
Arunas

Спасибо, очень интересно, с нетерпением жду продолжения :)

Ответить
Руслан

Здравствуйте, а когда планируется "организация пайплайнов тестирования и сборки на Jenkins, Gitlab-CI и подобных"?

Ответить
Дмитрий Елисеев

Когда напишем контроллеры и фронтенд для приёмочных тестов.

Ответить
Дмитрий

Дмитрий, вопрос не много не в тему ) рекуррентные платежи (например через робокассу ), как лучше сделать, что бы как только срок подписки заканчивался, производилась оплата (auth.robokassa.ru/Merchant/Recurring с нужными параметрами), если повесить проверку сроков подписки на крон, то будет период в котором подписка закончилась, но еще не продлена? может подскажите как это реализовано у вас?

Ответить
Дмитрий Елисеев

Если Cron запускает скрипт каждый час, то можно подписке на сайте указывать немного больший срок с запасом на пару часов, чтобы видимого перерыва не было.

У нас платежи списываются самой платёжной системой и при этом сразу приходят уведомления.

Ответить
Дмитрий

Спасибо )

Ответить
Sergei

Я что то не очень понял: у нас в папке Test/Unit/Entity/User вложена еще одна папка User. Почему? Первая это тесты самой Entity User, а вторая?

Ответить
Дмитрий Елисеев

В первой папке тесты для всех классов. Во второй - только для методов класса User. Хотя здесь кроме User никаких соседних папок нет, поэтому первую папку и из Entity можно убрать.

Ответить
Роман

Было бы хорошо добавить возможность (видеть какие видео просмотрел и какие нет). А то если сделал перерыв несколько дней то потом нужно вспоминать что смотрел.

Еще один момент будет ли в курсе версионирование, как лучше делать нумерации версий и как писать список изменений системы.

Ответить
Роман

https://i.imgur.com/qjlTvKN.png

Дмитрий, скажите, у вас в этом эпизоде (Регистрация через социальные сети, коммит:

30509cb0 Added join by network use case ElisDN 14.01.2020, 16:43)

в исходном коде namespace у DTO JoinByNetwork задан как App\User\Command\JoinByNetwork, вместо App\Auth\Command\JoinByNetwork. Это опечатка или намеренно так сделано?

Ответить
Дмитрий Елисеев

Опечатка.

Ответить
Роман

Дмитрий, ещё вопрос, точнее наблюдение, про psalm.

После коммита "Updated vendors ElisDN 26.02.2020, 12:39", в котором вы обновили только некоторые пакеты (slim/psr7 и phpunit/phpunit) на более свежие, я обновил еще и все другие заодно. В частности, в моей версии вашего приложения был затронут psalm и поднят c "3.8.0" => "3.11.2". В то время, как у вас используется версия "3.9.3".

В связи с этим полная проверка check не прошла проверку на этапе api-analyze, так как psalm (из-за того что он, наверное сильно поумнел после обновления :) ) ругался на то, что в новой версии этого пакета он не понимает код User::getNetworks(). Вот скрин ошибки: https://i.imgur.com/T1FlAxy.png . И я уже много пробовал писать разных директив в аннотациях для psalm в том случае (они даже дали ссылку на эту ошибку), но всё равно не помогало.

Поэтому я поменял на такой вариант: https://i.imgur.com/GNDcFI2.png и ошибка пропала, но ваша версия кода с анонимной функцией в map() более элегантная. И в связи с этим вопрос, как правильно пометить анализатору в вашей версии кода User::getNetworks(), так чтобы он не ругался?

Ответить
Роман

Окончательный вариант получился такой, но это не совсем правильно, потому что лучше вызывать встроенные методы Collection у this->networks. Вот если бы пометить, чтобы psalm не проверял некоторые методы.

public function getNetworks(): array
    {
        $networks = [];
        /**
         * @var UserNetwork $network
         */
        foreach ($this->networks->toArray() as $network) {
            array_push($networks, $network->getNetwork());
        }

        return $networks;
    }
Ответить
Роман

UPD:

Решил проблему с помощью @psalm-suppress all :)

Ответить
Дмитрий Елисеев

Да, в крайнем случае можно пометить конкретную строку через аннотацию. Но вместо all желательно указывать именно конкретный тип MixedArgumentTypeCoercion из скриншота. Иначе можно нечаянно пропустить соседние ошибки.

Ответить
Roman Korolov

Спасибо!

Ответить
Артем Астапов

Как решается проблема нескольких конкурентных запросов на добавление одной и той же соцсети?

Ответить
Дмитрий Елисеев

В лучшем случае сработает проверка hasByNetwork. Иначе вылетит ошибка уникальности из БД.

Ответить
gfdgdf

спасибо, очень понятно объясняете

Ответить
Руслан

Здравствуйте, а когда примерно планируется реализация входа через социальные сети? Было бы интересно увидеть раздел аутентификации/авторизации завершенным, если это возможно. Спасибо.

Ответить
nikive

Здравствуйте, вопрос. У нас есть сущность Email, которая принадлежит пользователю, но данная сущность может принадлежать ещё чему-то, например заказу, как тогда не дублировать код?

Ответить
Дмитрий Елисеев

Если очень не хочется дублировать, то тогда класс можно вынести в отдельную папку. Но такой простой класс удобнее продублировать.

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий

Или войти через:

Yandex
MailRu
GitHub
Google