Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
web guard)驗證流程中取得的方法在 Laravel 的 middleware 中,你可以透過 Auth 或 request()->user() 取得目前登入的使用者資訊。這取決於你使用的是哪一種 guard(預設是 web)。以下是常見的寫法範例
Auth facadeuse Closure;
use Illuminate\Support\Facades\Auth;
public function handle($request, Closure $next)
{
$user = Auth::user(); // 取得目前登入的使用者
// 範例:檢查是否為管理者
if ($user && $user->is_admin) {
return $next($request);
}
abort(403, 'Unauthorized');
}$request 取得使用者public function handle($request, Closure $next)
{
$user = $request->user(); // 同樣取得登入使用者
// 範例:記錄使用者 ID
\Log::info('Middleware 使用者ID:' . optional($user)->id);
return $next($request);
}若你有定義多個 guard,例如 admin、api,則需指定 guard:
$user = Auth::guard('admin')->user();if (Auth::check()) {
$user = Auth::user();
}Auth::user() 只有在 session-based(如 web guard)驗證流程下才會有作用。guard 是正確的,或使用 Passport/Sanctum。如果你在 Laravel 中使用 Sanctum 做 API 認證,通常是透過 Bearer Token 登入。這種情況下,在 middleware 裡面取得登入使用者資料 的方式如下:
POST /login 或發 token 登入,取得 Bearer Token。Authorization: Bearer {token}使用 Auth::guard('sanctum')->user() 取得目前登入帳號資訊
public function handle(Request $request, Closure $next): Response
{
$postId = $request->route('id') ?? $request->route('post'); // 支援不同路由命名
$user = Auth::guard('sanctum')->user();
$user_id = $user?->id;
if (!$user) {
return response()->json(['message' => 'Unauthenticated'], 401);
}
// 你可以使用 $user->id 或 $user->email 等資訊
\Log::info('API 使用者 ID:' . $user->id);
return $next($request);
}在 Sanctum 的情況下,Laravel 會自動綁定 sanctum 到預設 guard,所以直接用 $request->user() 就夠了,但無法取得目前登入帳號資訊,則可以嚐試用 Auth::guard('sanctum')->user() 取得。