Membuat Middleware Cors dan ForceJson

Membuat Cors

namespace App\Http\Middleware;
 
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
 
class CorsMiddleware
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle($request, Closure $next)
{
$response = $next($request);
 
// Menambahkan header CORS ke respons
$response->headers->set('Access-Control-Allow-Origin', '*'); // Ganti '*' dengan domain yang diizinkan
$response->headers->set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
$response->headers->set('Access-Control-Allow-Headers', 'Content-Type, Authorization');
$response->headers->set('Access-Control-Allow-Credentials', 'true');
 
// Jika permintaan adalah preflight OPTIONS, kembalikan respons kosong dengan status 200
if ($request->getMethod() == 'OPTIONS') {
return response()->json([], 200);
}
 
return $response;
}

Membuat ForceJson

namespace App\Http\Middleware;
 
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
 
class ForceJsonResponse
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
$response = $next($request);
 
// Memastikan header 'Accept' adalah 'application/json'
if (!$request->expectsJson()) {
return response()->json([
'result' => [
'status' => '406',
'message' => 'Not Acceptable: API requests must include Accept: application/json'
]
], 406);
}
 
return $response;
}

fungsi ini untuk mengatasi jika API ini di panggil tidak menyertakan Header Accep: application-json maka akan ada response seperti diatas

Mendaftarkan ke Kernel.php

pada app/Http/Kernel.php anda tambahkan pada bagian ini untuk ForceJson

protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\TrustProxies::class,
\Illuminate\Http\Middleware\HandleCors::class,
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
+ \App\Http\Middleware\ForceJsonResponse::class,
];

pada app/Http/Kernel.php anda tambahkan pada bagian ini untuk Cors

protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
 
'api' => [
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
\Illuminate\Routing\Middleware\ThrottleRequests::class . ':api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
+ \App\Http\Middleware\CorsMiddleware::class,
],
];

Komentar

Ada 0 komentar pada episode ini.