feat: 회원가입 api 연결 및 토큰 저장 후 Home 이동

This commit is contained in:
2026-01-02 14:58:05 +09:00
parent 014cb61734
commit 355c9d7743
7 changed files with 235 additions and 29 deletions

View File

@@ -7,16 +7,18 @@ import React, {
useMemo,
useState,
} from "react";
import { loginApi } from "../api/auth";
import { loginApi, signUpApi } from "../api/auth";
const ACCESS_TOKEN_KEY = "accessToken";
const REFRESH_TOKEN_KEY = "refreshToken";
export type AuthContextValue = {
accessToken: string | null;
isAuthed: boolean;
isHydrating: boolean; // 앱 시작 시 저장소에서 토큰 읽는 중인지
isHydrating: boolean;
signIn: (loginId: string, password: string) => Promise<void>;
signOut: () => Promise<void>;
signUp: (loginId: string, password: string) => Promise<void>;
};
const AuthContext = createContext<AuthContextValue | null>(null);
@@ -34,9 +36,10 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
}, []);
const signIn = useCallback(async (loginId: string, password: string) => {
const token = await loginApi({ loginId, password });
setAccessToken(token);
await AsyncStorage.setItem(ACCESS_TOKEN_KEY, token);
const response = await loginApi({ loginId, password });
setAccessToken(response.data.accessToken);
await AsyncStorage.setItem(ACCESS_TOKEN_KEY, response.data.accessToken);
await AsyncStorage.setItem(REFRESH_TOKEN_KEY, response.data.accessToken);
}, []);
const signOut = useCallback(async () => {
@@ -44,6 +47,13 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
await AsyncStorage.removeItem(ACCESS_TOKEN_KEY);
}, []);
const signUp = useCallback(async (loginId: string, password: string) => {
const response = await signUpApi({ loginId, password });
setAccessToken(response.data.accessToken);
await AsyncStorage.setItem(ACCESS_TOKEN_KEY, response.data.accessToken);
await AsyncStorage.setItem(REFRESH_TOKEN_KEY, response.data.accessToken);
}, []);
const value = useMemo<AuthContextValue>(
() => ({
accessToken,
@@ -51,6 +61,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
isHydrating,
signIn,
signOut,
signUp,
}),
[accessToken, isHydrating, signIn, signOut]
);