AuthController.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\DTO\AuthDTO;
  4. use App\Http\Requests\AuthRequest;
  5. use App\Http\Requests\RefreshTokenRequest;
  6. use Illuminate\Http\JsonResponse;
  7. use App\Http\Resources\AuthResource;
  8. use App\Services\AuthService;
  9. use App\DTO\RefreshTokenDTO;
  10. class AuthController extends Controller
  11. {
  12. public function __construct(
  13. protected AuthService $authService,
  14. ) {}
  15. public function login(AuthRequest $request): JsonResponse
  16. {
  17. $result = $this->authService->login(credentials: AuthDTO::fromRequest(request: $request));
  18. if (!$result) {
  19. return $this->errorResponse(message: __('auth.failed'), code: 401);
  20. }
  21. return $this->successResponse(payload: new AuthResource($result['payload']), message: __('auth.logged_in'))
  22. ->withCookie(
  23. cookie(
  24. 'refresh_token',
  25. $result['refreshToken'],
  26. config('sanctum.rt_expiration') * 60,
  27. '/',
  28. config('session.domain'),
  29. config('session.secure'),
  30. true,
  31. false,
  32. 'Lax'
  33. )
  34. );
  35. }
  36. public function logout(): JsonResponse
  37. {
  38. $this->authService->logout();
  39. return $this->successResponse(message: __('auth.logout'))
  40. ->withoutCookie('refresh_token');
  41. }
  42. public function refresh(RefreshTokenRequest $request): JsonResponse
  43. {
  44. $result = $this->authService->refresh(RefreshTokenDTO::fromRequest(request: $request));
  45. if (is_null($result)) {
  46. return $this->errorResponse(message: __('auth.unauthorized'), code: 403)
  47. ->withoutCookie('refresh_token');
  48. }
  49. return $this->successResponse(payload: new AuthResource($result['payload']))
  50. ->withCookie(
  51. cookie(
  52. 'refresh_token',
  53. $result['refreshToken'],
  54. config('sanctum.rt_expiration') * 60,
  55. '/',
  56. config('session.domain'),
  57. config('session.secure'),
  58. true,
  59. true,
  60. 'Lax'
  61. )
  62. );
  63. }
  64. }