Laravel6を使用しています。まだローカル環境での開発中です。
◆やりたいこと
アプリと接続するAPIを作成しています。
全てのAPI接続時に統一のログを取る為、Middlewareのクラスを作成しました。
この部分でPassportで認証したユーザー情報を取得したいです。
PHP
1// Middleware/CheckAccess.php 2<?php 3 4namespace App\Http\Middleware; 5use Illuminate\Support\Facades\Log; 6use Closure; 7 8/** 9 * 毎回の通信で行う処理 10 */ 11class CheckAccess 12{ 13 /** 14 * APIにアクセスされた時の処理 15 * 16 * @param \Illuminate\Http\Request $request 17 * @param \Closure $next 18 * @return mixed 19 */ 20 public function handle($request, Closure $next) 21 { 22 // ↓常にNullになる 23 var_dump($request->user()); 24 25 // こんな感じでアクセスしたユーザー情報のログを残したい 26 //(このまま動かすと$request->user()がnullなのでエラーになる) 27 Log::info('access:'.$request->user()->id); 28 29 // その他に渡された値のチェック等も行う予定 30 31 $response = $next($request); 32 33 return $response; 34 } 35}
PHP
1// routes/api.php 内部 2Route::group(['middleware' => ['auth:api']], function () { 3 Route::post('/sample', 'SampleController@sample'); 4}); 5
PHP
1// app/Http/Kernel.php 内部 2protected $middleware = [ 3 // 前略 4 \App\Http\Middleware\CheckAccess::class, //←追加 5];
◆できていること
SampleControllerの処理中では$request->user()
が正しく取得できています。
CheckAccessにて$request->user()
を含まないログを指定した場合は正しくログ書き出しができています。
◆質問
CheckAccessを通過する段階ではまだ認証が行われていないのかなと思いますが、どのように修正すればいいか分かりません。
Middlewareを使用すること自体正しいのか分かっていないレベルなのですが、ご回答頂ければ助かります。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/16 07:56
2021/02/16 07:58