diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php new file mode 100644 index 0000000..d8f08fd --- /dev/null +++ b/app/Http/Controllers/AuthController.php @@ -0,0 +1,28 @@ +validate([ + 'email' => ['required','email'], + 'password' => ['required'], + ]); + + if (!Auth::attempt($credentials, remember: true)) { + return response()->json(['message' => 'Invalid credentials'], 422); + } + + $request->session()->regenerate(); + return response()->json(['message' => 'ok']); + } + +} diff --git a/bootstrap/app.php b/bootstrap/app.php index af727c6..d6cb835 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -11,7 +11,7 @@ return Application::configure(basePath: dirname(__DIR__)) health: '/up', ) ->withMiddleware(function (Middleware $middleware): void { - // + $middleware->statefulApi(); }) ->withExceptions(function (Exceptions $exceptions): void { // diff --git a/config/cors.php b/config/cors.php index 8a39e6d..94f07be 100644 --- a/config/cors.php +++ b/config/cors.php @@ -29,6 +29,6 @@ return [ 'max_age' => 0, - 'supports_credentials' => false, + 'supports_credentials' => true, ]; diff --git a/config/sanctum.php b/config/sanctum.php index 44527d6..63ecc5e 100644 --- a/config/sanctum.php +++ b/config/sanctum.php @@ -17,7 +17,7 @@ return [ 'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( '%s%s', - 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + 'localhost,localhost:5173,127.0.0.1,127.0.0.1:8000,::1', Sanctum::currentApplicationUrlWithPort(), // Sanctum::currentRequestHost(), ))), diff --git a/database/migrations/2025_10_14_210658_create_sessions_table.php b/database/migrations/2025_10_14_210658_create_sessions_table.php new file mode 100644 index 0000000..f60625b --- /dev/null +++ b/database/migrations/2025_10_14_210658_create_sessions_table.php @@ -0,0 +1,31 @@ +string('id')->primary(); + $table->foreignId('user_id')->nullable()->index(); + $table->string('ip_address', 45)->nullable(); + $table->text('user_agent')->nullable(); + $table->longText('payload'); + $table->integer('last_activity')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('sessions'); + } +}; diff --git a/database/migrations/2025_10_14_210940_add_remember_token_to_users_table.php b/database/migrations/2025_10_14_210940_add_remember_token_to_users_table.php new file mode 100644 index 0000000..48d6315 --- /dev/null +++ b/database/migrations/2025_10_14_210940_add_remember_token_to_users_table.php @@ -0,0 +1,27 @@ +rememberToken()->nullable(); + } + }); + } + + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + if (Schema::hasColumn('users', 'remember_token')) { + $table->dropColumn('remember_token'); + } + }); + } + +}; diff --git a/routes/api.php b/routes/api.php index 72ced87..2f66a13 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,9 +1,9 @@ user(); @@ -13,10 +13,13 @@ Route::get("/hello", function (Request $request) { return "Hello"; }); - Route::get('/test-db', function () { $user = \App\Models\User::find(1); echo $user->email; }); Route::post("/user/create", [UserController::class, "create"]); + +Route::middleware('web')->post('/login', [AuthController::class, 'login']); + +Route::middleware(['web', 'auth'])->get('/me', fn (Request $r) => $r->user());