auth with session

This commit is contained in:
2025-04-28 16:32:12 +03:30
parent c966f38236
commit fb750a0dc8
23 changed files with 900 additions and 81 deletions

View File

@@ -0,0 +1,51 @@
<?php
namespace App\Http\Controllers;
use App\Http\Requests\Auth\LoginRequest;
use App\Http\Traits\ApiResponse;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
use ApiResponse;
public function login(LoginRequest $request): JsonResponse
{
if ($this->attemptLogin($request))
{
$request->session()->regenerate();
$this->updateLastLogin($request);
return $this->successResponse();
}
return $this->errorResponse();
}
protected function attemptLogin(Request $request): bool
{
return Auth::guard()->attempt($request->only('username', 'password'));
}
protected function updateLastLogin(Request $request): void
{
if (!$request->session()->exists('last_login')) {
$request->session()->put('last_login', now());
}
Auth::user()->update([
'last_login' => now(),
]);
}
public function logout(Request $request): JsonResponse
{
Auth::guard()->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return $this->successResponse();
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace App\Http\Controllers;
use App\Http\Traits\ApiResponse;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ProfileController extends Controller
{
use ApiResponse;
public function info(): JsonResponse
{
return $this->successResponse(User::query()->find(auth()->id()));
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace App\Http\Requests\Auth;
use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Foundation\Http\FormRequest;
class LoginRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, ValidationRule|array|string>
*/
public function rules(): array
{
return [
'username' => 'required|exists:users,username',
'password' => 'required|string',
];
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace app\Http\Traits;
use Illuminate\Http\JsonResponse;
trait ApiResponse
{
public function successResponse(mixed $data = null, string $message = null, int $statusCode = 200): JsonResponse
{
if (!is_null($data))
{
return response()->json([
'data' => $data
], $statusCode);
}
$message = $message ?? __('messages.successful');
return response()->json([
'message' => $message
], $statusCode);
}
public function errorResponse(string|array $message, int $statusCode = 422): JsonResponse
{
return response()->json([
'message' => $message
], $statusCode);
}
}