Как правильно хранить на сервере временное значение Laravel api?

есть клиент на vue и api на Larave

как правильно хранить временный рандомный код в апихе, который отправляется по смс на номер клиента через сервис Twillio

Схема такая:

  1. Клиент вводит номер телефона и жмет отправить
  2. Отправляется запрос на api
  3. Формируется рандомное число и отправляется смс-кой - и в этот момент это число нужно как-то сохранить для тек пользователя
  4. Клиенту пришло смс и он вводит код в поле и жмет проверить
  5. Запрос с кодом идет на апи и тут нужно проверить его

Ответы (2 шт):

Автор решения: dinario

Сохраняете в бд. Например, создаете таблицу для кодов. Храните там телефон, отправленный код, время отправления кода. При первом запросе создаете запись с новым кодом, записываете телефон и текущее время. Во втором запросе проверяете код по телефону и время.

→ Ссылка
Автор решения: Walfter

База данных не всегда есть правильный способ хранения подобных кодов, вы можете закешировать как событие отправки так и сам код

$ttl_seconds = 30;
$status = Cache::remember($request->phone, $ttl_seconds, function() use ($request) {
    /** отправляем код */
    // пишем в статус код и дату отправки
    return [
        'sended_at' => now(),
        'code' => $code,
    ];
});
return new CodeResource($data);

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

Но если задача более простая то можете хранить в бд, проблемы тоже не создаст.

P.S.: Так же если вы добавите к ключу ip и девайс то можете обрабатывать разные коды на разных устройствах одновременно, то есть авторизация на компьютере по смс не убьёт авторизацию на телефоне через смс

→ Ссылка