ESCA7A / verification

Модуль верификации, который я делал полностью вырезан из рабочего проекта без соблюдений работоспособности в качестве примера моего code flow. Надеюсь этот пример поможет понять вам уровень моих знаний. Если у вас возникнут вопросы или предложения по коду, смело пишите ишью. Я буду рад любой обратной связи :)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Модуль верификации

Что бы воспользоваться verification serivce'ом, нужно его сформировать.

Формирование service объекта состоит из нескольких этапов (подробнее в Service.php):

  • создание channel канала связи
  • передача verifyValue номера телефона, почты и т.д. по которому будет отправлен код подтверждения
  • передача message сообщения

Создание запроса на верификацию


1 этап "Канал связи"

Указать один из каналов связи (Подробнее о каналах связи в Channels):

use Domain\Verification\VerificationService;
use Domain\Verification\Channels\SmsChannel;
...
$service = new VerificationService();
$service->channel(new SmsChannel()); // 

2 этап "Верифицируемое значение/адрес"

Указать куда отправлять код подтверждения:

...
$verify_value = '+71112223344'; $verify_value = 'test@testmail.com';
$service->verifyValue($verify_value); // 

3 этап "Сообщение для отправки с кодом подтверждения"

Код формируется автоматически на этапе генерации сервиса как свойство. Поэтому у вас сразу есть к нему доступ Кол-во символом или размерность кода, можно задать в конфигурации Указать текст сообщения и передать в тело код:

...
$message = __('вас приветствует meet-market. Код для активации: :code', [
    'code' => $service->code
]);

В бой вступает метод send()

Когда у нас есть все необходимые ресурсы, время для отправки данных в таблицу кодов проходящих верификацию verifications

$service->send(); // отсылает код по каналу связи и создает новую запись в `verifications`

Верификация запроса


Для верификации запроса нужно проедать те же действия с небольшими отличиями

  • метод message($message) нам уже не понадобиться

верификация кода подтверждения

Что бы верифицировать пользователя, необходимо указать с какого канала связи он стучится и верен ли код который он присылает Если проверка пройдет успешно, то статус записи сменится с send на confirmed, а метод verify() вернет true

use Domain\Verification\VerificationService;
use Domain\Verification\Channels\SmsChannel;

$code = '1234';
$verify_value = '+71112223344'; $verify_value = 'test@testmail.com';

$service = new VerificationService();
$service->channel(new SmsChannel())->verifyValue($verify_value)->verify($code): bool;

Создание собственного канала связи

Что бы создать свой канал связи, достаточно имплементировать ему VerificationChannelContract (Подробнее в Channels)

use Domain\Verification\Channels\VerificationChannelContract;

class MyNewChannel implements VerificationChannelContract {...}

Теперь когда вам нужно будет использовать сервис со своим каналом передачи кода подтверждения, достаточно будет написать

use Domain\Verification\VerificationService;
use My\Namespace\Channels\MyNewChannel;
...
$service = new VerificationService();
$service->channel(new MyNewChannel())->verifyValue($verify_value)->message($some_message)->send();

Подробнее о конфигурации

Сервис предоставляет конфиг с небольшим набором параметров (Подробнее в ./config/verification.php) Давайте рассмотрим что они из себя представляют

    "code_length" => 4,         // можно указать длину кода подтверждения
    "limit_send_count" => 3,    // число разрешенных запросов на отправку кода
    "next_send_after" => 30,    // кол-во секунд когда на отправку стоит ограничение в виде паузы
    "expire_seconds" => 240,    // кол-во секунд когда код считается действительным
    "timeout" => 600,           // кол-во секунд таймаута, это ограничение если кол-во попыток превысило ожидания 
    "flushCode" => true,        // будет ли удаляться/перезаписываться старая запись перед отправкой нового кода

About

Модуль верификации, который я делал полностью вырезан из рабочего проекта без соблюдений работоспособности в качестве примера моего code flow. Надеюсь этот пример поможет понять вам уровень моих знаний. Если у вас возникнут вопросы или предложения по коду, смело пишите ишью. Я буду рад любой обратной связи :)

License:MIT License


Languages

Language:PHP 100.0%