MIF_E31231623/website/wisata_web/app/Http/Middleware/AuthenticateApiToken.php

45 lines
1.1 KiB
PHP

<?php
namespace App\Http\Middleware;
use App\Models\PersonalAccessToken;
use Closure;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class AuthenticateApiToken
{
public function handle(Request $request, Closure $next): Response
{
$plainTextToken = $request->bearerToken();
if (! $plainTextToken) {
return $this->unauthorized();
}
$accessToken = PersonalAccessToken::query()
->where('token', hash('sha256', $plainTextToken))
->with('user')
->first();
if (! $accessToken || ! $accessToken->user) {
return $this->unauthorized();
}
$accessToken->forceFill(['last_used_at' => now()])->save();
$request->setUserResolver(fn () => $accessToken->user);
$request->attributes->set('access_token', $accessToken);
return $next($request);
}
private function unauthorized(): JsonResponse
{
return response()->json([
'success' => false,
'message' => 'Unauthenticated.',
], 401);
}
}