Как правильно хранить на сервере временное значение Laravel api?
есть клиент на vue и api на Larave
как правильно хранить временный рандомный код в апихе, который отправляется по смс на номер клиента через сервис Twillio
Схема такая:
- Клиент вводит номер телефона и жмет отправить
- Отправляется запрос на api
- Формируется рандомное число и отправляется смс-кой - и в этот момент это число нужно как-то сохранить для тек пользователя
- Клиенту пришло смс и он вводит код в поле и жмет проверить
- Запрос с кодом идет на апи и тут нужно проверить его
Ответы (2 шт):
Сохраняете в бд. Например, создаете таблицу для кодов. Храните там телефон, отправленный код, время отправления кода. При первом запросе создаете запись с новым кодом, записываете телефон и текущее время. Во втором запросе проверяете код по телефону и время.
База данных не всегда есть правильный способ хранения подобных кодов, вы можете закешировать как событие отправки так и сам код
$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 и девайс то можете обрабатывать разные коды на разных устройствах одновременно, то есть авторизация на компьютере по смс не убьёт авторизацию на телефоне через смс