| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- 'use server';
- import { cookies } from 'next/headers';
- import { ResultDto } from '@/dtos/response/common';
- import { LoginRequest, RegisterRequest, VerifyEmailRequest, ResendEmailRequest, ForgotPasswordRequest, ResetPasswordRequest } from '@/dtos/request/auth';
- import { LoginResponse } from '@/dtos/response/auth';
- import { fetchJson, getAccessToken, getRefreshToken } from '@/lib/utils/server';
- // 로그인
- export async function fetchLogin(request: LoginRequest): Promise<ResultDto<LoginResponse>> {
- const res = await fetchJson<LoginResponse>('/api/auth/login', {
- method: 'POST',
- body: JSON.stringify(request)
- });
- if (res.success && res.data) {
- const cookie = await cookies();
- const option = {
- httpOnly: true, path: '/'
- };
- cookie.set('accessToken', res.data.accessToken, option);
- cookie.set('refreshToken', res.data.refreshToken, option);
- }
- return res;
- }
- // 로그아웃
- export async function fetchLogout(): Promise<ResultDto> {
- const res = await fetchJson('/api/auth/logout', {
- method: 'POST'
- });
- if (res.success) {
- const cookie = await cookies();
- cookie.delete('accessToken');
- cookie.delete('refreshToken');
- }
- return res;
- }
- // 회원가입 요청
- export async function fetchRegister(request: RegisterRequest): Promise<ResultDto> {
- return await fetchJson('/api/auth/register', {
- method: 'POST',
- body: JSON.stringify(request)
- });
- }
- // 회원가입 완료
- export async function Registration(email: string|null): Promise<ResultDto> {
- const cookie = (await cookies()).get('isVerified-Registration');
- return await fetchJson(`/api/auth/registration/${email}`, {
- method: 'GET',
- headers: {
- 'Cookie': `isVerified-Registration=${cookie?.value || ""}`
- }
- });
- }
- // 비밀번호 찾기
- export async function fetchForgotPassword(request: ForgotPasswordRequest): Promise<ResultDto> {
- return await fetchJson(`/api/auth/forgot-password`, {
- method: 'POST',
- body: JSON.stringify(request)
- });
- }
- // 인증번호 확인
- export async function fetchVerifyEmail(request: VerifyEmailRequest): Promise<ResultDto> {
- return await fetchJson('/api/auth/verify-email', {
- method: 'POST',
- body: JSON.stringify(request)
- });
- }
- // 인증번호 다시 받기
- export async function fetchResendEmail(params: ResendEmailRequest): Promise<ResultDto> {
- return await fetchJson('/api/auth/resend-email', {
- method: 'POST',
- body: JSON.stringify(params)
- });
- }
- // 비밀번호 변경
- export async function fetchResetPassword(params: ResetPasswordRequest): Promise<ResultDto> {
- const cookie = (await cookies()).get('isVerified-ForgotPassword');
- return await fetchJson('/api/auth/reset-password', {
- method: 'POST',
- headers: {
- 'Cookie': `isVerified-ForgotPassword=${cookie?.value || ""}`
- },
- body: JSON.stringify(params)
- });
- }
- // RefreshToken으로 AccessToken 갱신
- export async function refreshAccessToken(): Promise<boolean>
- {
- const refreshToken = await getRefreshToken();
- if (!refreshToken) {
- return false;
- }
- return await fetchJson('/api/auth/refresh-token', {
- method: 'POST',
- body: JSON.stringify({ RefreshToken: refreshToken })
- }).then(res => res.success);
- }
- // 로그인 확인
- export async function checkAuthServer(): Promise<boolean>
- {
- const accessToken = await getAccessToken();
- if (accessToken) {
- try {
- const payload = JSON.parse(
- Buffer.from(accessToken.split('.')[1], 'base64').toString()
- );
- if (payload.exp * 1000 > Date.now()) {
- return true;
- }
- } catch {
- }
- }
- return await refreshAccessToken();
- }
|