auth.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. 'use server';
  2. import { cookies } from 'next/headers';
  3. import { ResultDto } from '@/dtos/response/common';
  4. import { LoginRequest, RegisterRequest, VerifyEmailRequest, ResendEmailRequest, ForgotPasswordRequest, ResetPasswordRequest } from '@/dtos/request/auth';
  5. import { fetchJson, getAccessToken, getRefreshToken } from '@/lib/utils/server';
  6. // 로그인
  7. export async function fetchLogin(request: LoginRequest): Promise<ResultDto> {
  8. return await fetchJson('/api/auth/login', {
  9. method: 'POST',
  10. body: JSON.stringify(request)
  11. });
  12. }
  13. // 회원가입 요청
  14. export async function fetchRegister(request: RegisterRequest): Promise<ResultDto> {
  15. return await fetchJson('/api/auth/register', {
  16. method: 'POST',
  17. body: JSON.stringify(request)
  18. });
  19. }
  20. // 회원가입 완료
  21. export async function Registration(email: string|null): Promise<ResultDto> {
  22. const cookie = (await cookies()).get('isVerified-Registration');
  23. return await fetchJson(`/api/auth/registration/${email}`, {
  24. method: 'GET',
  25. headers: {
  26. 'Cookie': `isVerified-Registration=${cookie?.value || ""}`
  27. }
  28. });
  29. }
  30. // 비밀번호 찾기
  31. export async function fetchForgotPassword(request: ForgotPasswordRequest): Promise<ResultDto> {
  32. return await fetchJson(`/api/auth/forgot-password`, {
  33. method: 'POST',
  34. headers: {'Content-Type': 'application/json'},
  35. data: request
  36. });
  37. }
  38. // 인증번호 확인
  39. export async function fetchVerifyEmail(request: VerifyEmailRequest): Promise<ResultDto> {
  40. return await fetchJson('/api/auth/verify-email', {
  41. method: 'POST',
  42. headers: {'Content-Type': 'application/json'},
  43. data: request
  44. });
  45. }
  46. // 인증번호 다시 받기
  47. export async function fetchResendEmail(params: ResendEmailRequest): Promise<ResultDto> {
  48. return await fetchJson('/api/auth/resend-email', {
  49. method: 'POST',
  50. headers: {'Content-Type': 'application/json'},
  51. data: params
  52. });
  53. }
  54. // 비밀번호 변경
  55. export async function fetchResetPassword(params: ResetPasswordRequest): Promise<ResultDto> {
  56. const cookie = (await cookies()).get('isVerified-ForgotPassword');
  57. return await fetchJson('/api/auth/reset-password', {
  58. method: 'POST',
  59. headers: {
  60. 'Content-Type': 'application/json',
  61. 'Cookie': `isVerified-ForgotPassword=${cookie?.value || ""}`
  62. },
  63. data: params
  64. });
  65. }
  66. // AccessToken 인증
  67. export async function verifyAccessToken(): Promise<boolean>
  68. {
  69. const accessToken = await getAccessToken();
  70. if (!accessToken) {
  71. return false;
  72. }
  73. return await fetchJson('/api/auth/verify-token', {
  74. method: 'GET'
  75. }).then(res => res.ok);
  76. }
  77. // RefreshToken으로 AccessToken 갱신
  78. export async function refreshAccessToken(): Promise<boolean>
  79. {
  80. const refreshToken = await getRefreshToken();
  81. if (!refreshToken) {
  82. return false;
  83. }
  84. return await fetchJson('/api/auth/refresh-token', {
  85. method: 'GET'
  86. }).then(res => res.ok);
  87. }
  88. // 로그인 확인
  89. export async function isAuthenticated(): Promise<boolean> {
  90. let ret = await verifyAccessToken();
  91. if (!ret) {
  92. ret = await refreshAccessToken();
  93. }
  94. return ret;
  95. }