From f56a6e820c9c51af986254fc442693bfade64133 Mon Sep 17 00:00:00 2001 From: "c.girardi" Date: Wed, 21 Feb 2024 17:58:41 +0100 Subject: [PATCH] Initial api service; Clean code; --- app/Http/Controllers/Api/AuthController.php | 56 +++++++++++++++++++ app/Http/Controllers/Api/WordsController.php | 42 ++++++++++++++ app/Http/Kernel.php | 4 +- .../ReturnJsonResponseMiddleware.php | 21 +++++++ config/sanctum.php | 2 +- routes/api.php | 7 +++ routes/web.php | 37 +++--------- 7 files changed, 139 insertions(+), 30 deletions(-) create mode 100644 app/Http/Controllers/Api/AuthController.php create mode 100644 app/Http/Controllers/Api/WordsController.php create mode 100644 app/Http/Middleware/ReturnJsonResponseMiddleware.php diff --git a/app/Http/Controllers/Api/AuthController.php b/app/Http/Controllers/Api/AuthController.php new file mode 100644 index 0000000..453a438 --- /dev/null +++ b/app/Http/Controllers/Api/AuthController.php @@ -0,0 +1,56 @@ +middleware('auth:sanctum', ['only' => 'logout']); + } + + + /** + * @param Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function login(Request $request) + { + $loginUserData = $request->validate([ + 'email' => 'required|string|email', + 'password' => 'required|min:8' + ]); + $user = User::where('email', $loginUserData['email'])->first(); + if (!$user || !Hash::check($loginUserData['password'], $user->password)) { + return response()->json([ + 'message' => 'Invalid Credentials' + ], 401); + } + $token = $user->createToken( + $user->name . '-AuthToken', + ['*'], + (new \DateTime())->add(new \DateInterval('PT30M')) + )->plainTextToken; + return response()->json([ + 'access_token' => $token, + ]); + } + + /** + * @return \Illuminate\Http\JsonResponse + */ + public function logout() + { + auth()->user()->tokens()->delete(); + + return response()->json([ + "message" => "logged out" + ]); + } + +} diff --git a/app/Http/Controllers/Api/WordsController.php b/app/Http/Controllers/Api/WordsController.php new file mode 100644 index 0000000..b381a2f --- /dev/null +++ b/app/Http/Controllers/Api/WordsController.php @@ -0,0 +1,42 @@ +middleware('auth:sanctum'); + } + + + /** + * Display a listing of the resource. + */ + public function index() + { + $words = Word::all(); + return response()->json([ + 'status' => true, + 'words' => $words + ]); + } + + + /** + * Display the specified resource. + */ + public function show(Word $word) + { + return response()->json([ + 'status' => true, + 'words' => $word + ]); + } + +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index dde42cf..c3bac4a 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -2,6 +2,7 @@ namespace App\Http; +use App\Http\Middleware\ReturnJsonResponseMiddleware; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel @@ -39,7 +40,8 @@ class Kernel extends HttpKernel ], 'api' => [ - // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + ReturnJsonResponseMiddleware::class, \Illuminate\Routing\Middleware\ThrottleRequests::class . ':api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], diff --git a/app/Http/Middleware/ReturnJsonResponseMiddleware.php b/app/Http/Middleware/ReturnJsonResponseMiddleware.php new file mode 100644 index 0000000..a0a4f1d --- /dev/null +++ b/app/Http/Middleware/ReturnJsonResponseMiddleware.php @@ -0,0 +1,21 @@ +headers->set('Accept', 'application/json'); + return $next($request); + } +} diff --git a/config/sanctum.php b/config/sanctum.php index 35d75b3..b111a3c 100644 --- a/config/sanctum.php +++ b/config/sanctum.php @@ -46,7 +46,7 @@ return [ | */ - 'expiration' => null, + 'expiration' => 10, /* |-------------------------------------------------------------------------- diff --git a/routes/api.php b/routes/api.php index 889937e..f7f95ae 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,5 +1,6 @@ get('/user', function (Request $request) { return $request->user(); }); + +Route::post('login', [AuthController::class, 'login']); +Route::post('logout',[AuthController::class,'logout']); + +Route::apiResource('words', \App\Http\Controllers\Api\WordsController::class); + diff --git a/routes/web.php b/routes/web.php index f869c65..cab1afa 100644 --- a/routes/web.php +++ b/routes/web.php @@ -26,36 +26,17 @@ Route::get('/', function () { return redirect('words'); }); -Route::prefix('test')->group(function () { - - Route::get('/{name?}', function (?string $name = null) { - return $name ?? 'niente'; - })->whereAlpha('name'); - - Route::get('/{number}', function (int $number = null) { - return $number; - })->whereNumber('number'); -}); - -Route::get('/pippo', function (Request $request) { - return response()->json([ - 'name' => 'Abigail', - 'state' => 'CA', - ]); -}); - - -Route::get('/dashboard', function () { - return view('dashboard'); -})->middleware(['auth', 'verified'])->name('dashboard'); - -Route::middleware('auth')->group(function () { - Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); - Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); - Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); -}); +//Route::get('/dashboard', function () { +// return view('dashboard'); +//})->middleware(['auth', 'verified'])->name('dashboard'); +// +//Route::middleware('auth')->group(function () { +// Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); +// Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); +// Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); +//}); Route::prefix('words')->group(function () { Route::get('/', [WordsController::class, 'index'])->name('words.index');