Я использую laravel 5.8
в приложении электронной коммерции
Мне нужно, чтобы пользователи добавляли продукты в корзину без входа в систему из мобильного приложения и синхронизировали данные корзины с Интернетом после входа в систему. поэтому, когда пользователь входит в систему с веб-аккаунта, он может видеть элементы своей корзины, добавленные из мобильного приложения.
Я использую драйвер базы данных для сеанса
MY api gaurd in kernel.php
'api' => [
'throttle:60,1',
'bindings',
StartSession::class,
'session.exists',
],
промежуточное программное обеспечение checkExistsSession
public function handle($request, Closure $next)
{
$user = Auth::user();
$uuid = $request->header('UUID', 0);
$session = $request->session();
if (($user || $uuid) && config('session.driver') == 'database') {
$exists = DB::table('sessions')
->where(function ($q) use ($uuid, $user) {
if ($user) {
$q->where('user_id', $user->id);
}
$q->orWhere('uuid', $uuid);
})
->where('id', '!=', $session->getId())
->first();
if ($exists) {
// set the previous session as current session
$session->setId($exists->id);
}
}
if ($uuid) {
DB::table('sessions')->where('id', $session->getId())->update(['uuid' => $uuid]);
}
return $next($request);
}
все работает хорошо с почтальоном и бессонницей, но при использовании реальных мобильных устройств создает новый сеанс с каждым запросом до тех пор, пока пользователь не войдет в систему и UUID
не будет сохраненв таблице сессий.
этот код не работает
DB::table('sessions')->where('id', $session->getId())->update(['uuid' => $uuid]);