Я использовал сеанс в laravel, чтобы привязать неаутентифицированных пользователей к кавычкам. Но я столкнулся с проблемой, с которой я не могу справиться, и у меня есть ощущение, что это как-то связано с волшебными частями серверной части Laravel.
Вот мой код:
$session_id = session()->getId();
$booking = Booking::create([
'trip_start_date' => $request->pickup_date,
'trip_start_time' => $request->pickup_time,
'token' => $session_id,
'ip' => $request->ip(),
]);
session()->put('at_token', $session_id);
Но тогда при проверке токенов в промежуточном программном обеспечении токены совершенно разные... как записано в моем файле:
AT_TOKEN [pjIGjpuz0tRT0mjLTtdwgzTCDXrdwRCJssgJ1ukE]
BOOKING TOKEN [3fcjAzdKTOv2IGy3Zw7skh2c9PqN9O9G98BVbAO0]
Я вижу, что токен в сеансе выглядит как идентификатор сеанса, но токен из БД, похоже, не похож на идентификатор сеанса... буду очень признателен за любую помощь.
Обновлено: промежуточное ПО... Хотя это явно работает, токены не совпадают, но при сохранении идентификатора сеанса в сеансе и в БД я использую одну и ту же переменную, так как они могут не совпадать?!
//user not logged in, check session
if (session()->has('at_token')) {
$token = session()->get('at_token');
if ($token == $booking->token) {
//user has the token, give them access
return $next($request);
}else{
Log::info("AT_TOKEN [$token] DOES NOT EQUAL THE BOOKING TOKEN [$booking->token]");
}
}else{
Log::info('NO AT_TOKEN');
}
Первоначально мы можем сказать, что сеанс настроен неправильно, или должна быть проблема с разрешением или что-то в этом роде. Это ведет себя странно, потому что сеанс не сохраняется, поэтому каждый раз, когда вы вызываете сеанс, вы получаете другой токен.
Добавлено промежуточное программное обеспечение @UjjwalNepal ... Но я использую одну и ту же переменную при присвоении значения сеансу и БД, так как они могут отличаться?






Решение вашей проблемы здесь. https://laravel.com/docs/5.6/middleware#registering-middleware
также здесь https://laravel.com/docs/5.2/маршрутизация
В документе указано, что по умолчанию сеанс используется внутри промежуточного программного обеспеченияGroups, а не промежуточного программного обеспечения, которое не назначается маршрутам, а скорее назначается веб-промежуточному программному обеспечению. Таким образом, решение состоит в том, чтобы переместить линию
\Illuminate\Session\Middleware\StartSession::class,
к
protected $middleware = [
..........
\Illuminate\Session\Middleware\StartSession::class
........
]
Теперь ваш сеанс будет сохраняться.
Идентификатор сеанса берется и сохраняется в переменной, которая затем сохраняется в сеансе и в БД в модели бронирования... Значение токена сеанса такое же, как идентификатор сеанса, тот, что в БД, кажется неправильный? Я действительно запутался с этим
На самом деле, только что сделал еще одну проверку, значение БД правильное... Попробую ваш метод и дам вам знать, как он работает
Спасибо за вашу помощь, я был слишком уверен, что токен сеанса был правильной версией, ошибка новичка!
Можете ли вы показать реализацию промежуточного программного обеспечения?