AuthController.php 2.3 KB

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