私はlaravelのセッションを使用して、認証されていないユーザーを見積もりに結び付けています。しかし、頭を動かすことができず、Laravelsバックエンドの魔法の部分と関係があると感じているという問題に直面しています。
これが私のコードです:
$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]
セッション内のトークンはセッションIDのように見えますが、DBからのトークンはセッションIDとは異なるようです...何か助けていただければ幸いです。
編集:ミドルウェア...これは明らかに機能していますが、トークンは一致しませんが、セッションIDをセッションとDBに格納するときに、同じ変数を使用するので、どうして同じにできないのですか?!
//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');
}
あなたの問題の解決策はここにあります。https://laravel.com/docs/5.6/middleware#registering-middleware
こちらもhttps://laravel.com/docs/5.2/routing
このドキュメントには、デフォルトでは、セッションはルートに割り当てられていないミドルウェアではなく、Webミドルウェアに割り当てられているミドルウェアグループ内で使用されると記載されています。したがって、解決策はラインを移動することです
\Illuminate\Session\Middleware\StartSession::class,
に
protected $middleware = [
..........
\Illuminate\Session\Middleware\StartSession::class
........
]
これで、セッションが持続します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加