auth with session
This commit is contained in:
51
laravel/app/Http/Controllers/AuthController.php
Normal file
51
laravel/app/Http/Controllers/AuthController.php
Normal 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();
|
||||
}
|
||||
}
|
||||
18
laravel/app/Http/Controllers/ProfileController.php
Normal file
18
laravel/app/Http/Controllers/ProfileController.php
Normal 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()));
|
||||
}
|
||||
}
|
||||
30
laravel/app/Http/Requests/Auth/LoginRequest.php
Normal file
30
laravel/app/Http/Requests/Auth/LoginRequest.php
Normal 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',
|
||||
];
|
||||
}
|
||||
}
|
||||
31
laravel/app/Http/Traits/ApiResponse.php
Normal file
31
laravel/app/Http/Traits/ApiResponse.php
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user