Аутентификация гостя в REST API

Делаю тренировочной интернет-магазин. Нужно сделать добавление в корзину/просмотр корзины/оформление заказа и тд доступным не только для авторизованных юзеров , но и для гостей. Не могу понять как это сделать в stateless api.

На данный момент делаю следующим образом: в посреднике проверяю гость это или нет - если да, то просто генерирую ему uuid и возвращаю его в куках (пользователя не создаю). Потом уже к этому юиду вяжется корзина. Чет типа:

public function handle(Request $request, Closure $next): Response
{
    
    if (!$this->isFirstVisit($request)){

        return $next($request);
    }

    $guest_id = Str::uuid();

    $response = $next($request->merge(['guest' => $guest_id]));

    return $response->withCookie(cookie('csuid', $guest_id,secure: true));
}

Мне не нравится почему то идея использования куков в рест, однако куда ни гляну в магазинах - кидают ююид или токен в куки (идею генерации токенов для гостей я немного не понял, если кто может рассказать зачем - буду рад:)).

Главной вопрос - как мне реализовать аутентификацию гостя в рест. Как мне его 'запомнить' без сессии. Может действительно делать endpoint типа auth/guest/token, писать гостя в бд без каких либо данных с type = 'guest', а дальше работать как с авторизированным пользователем(токен в Header:Authorization).

Дело еще в том, что я не до конца понимаю ,как работает клиентская часть - потому что для меня загадка - как у юзера при входе сразу возникает токен и ююиды в куках . Я не думаю, что они генерируются на JS стороне, тк соответствующих запросов я не вижу.

В общем если кто подскажет - буду чудовищно благодарен ибо ломаю голову уже третий день.


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