AuthController.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. $refresh_token = $request->cookie("refresh_token");
  48. if (is_null($refresh_token)) {
  49. return $this->errorResponse(
  50. code: 403,
  51. )->withoutCookie("refresh_token");
  52. }
  53. $result = $this->authService->refresh(
  54. $refresh_token
  55. );
  56. if (is_null($result)) {
  57. return $this->errorResponse(
  58. message: __("auth.unauthorized"),
  59. code: 403,
  60. )->withoutCookie("refresh_token");
  61. }
  62. return $this->successResponse(
  63. payload: new AuthResource($result["payload"]),
  64. )->withCookie(
  65. cookie(
  66. "refresh_token",
  67. $result["refreshToken"],
  68. config("sanctum.rt_expiration") * 60,
  69. "/",
  70. config("session.domain"),
  71. config("session.secure"),
  72. true,
  73. true,
  74. "Lax",
  75. ),
  76. );
  77. }
  78. }