11import { getApi } from '@/app/api/config/appConfig' ;
22import { create } from 'zustand' ;
3- import { persist } from 'zustand/middleware' ;
43
54export interface User {
65 id : string ;
@@ -13,68 +12,88 @@ export interface User {
1312
1413interface AuthState {
1514 user : User | null ;
16- accessToken : string | null ;
1715 isLoggedIn : boolean ;
18- setUser : ( user : User , token : string ) => void ;
16+ setUser : ( user : User ) => void ;
1917 logout : ( ) => Promise < void > ;
2018 loginWithProvider : ( provider : User [ 'provider' ] ) => void ;
2119
2220 updateUser : ( ) => Promise < User | null > ;
21+ checkAuth : ( ) => Promise < User | null > ;
2322}
2423
25- export const useAuthStore = create < AuthState > ( ) (
26- persist (
27- ( set ) => ( {
28- user : null ,
29- accessToken : null ,
30- isLoggedIn : false ,
24+ export const useAuthStore = create < AuthState > ( ) ( ( set ) => ( {
25+ user : null ,
26+ isLoggedIn : false ,
3127
32- loginWithProvider : ( provider ) => {
33- window . location . href = `${ getApi } /oauth2/authorization/${ provider } ` ;
34- } ,
28+ loginWithProvider : ( provider ) => {
29+ window . location . href = `${ getApi } /oauth2/authorization/${ provider } ` ;
30+ } ,
3531
36- setUser : ( user , token ) => {
37- const updatedUser = { ...user , abv_degree : 5.0 } ;
38- set ( { user : updatedUser , accessToken : token , isLoggedIn : true } ) ;
39- } ,
32+ setUser : ( user ) => {
33+ const updatedUser = { ...user , abv_degree : user . abv_degree ?? 5.0 } ;
34+ set ( { user : updatedUser , isLoggedIn : true } ) ;
35+ } ,
4036
41- logout : async ( ) => {
42- try {
43- await fetch ( `${ getApi } /user/auth/logout` , {
44- method : 'POST' ,
45- credentials : 'include' ,
46- } ) ;
47- set ( { user : null , accessToken : null , isLoggedIn : false } ) ;
48- } catch ( err ) {
49- console . error ( '로그아웃 실패' , err ) ;
50- }
51- } ,
37+ // 로그아웃
38+ logout : async ( ) => {
39+ try {
40+ await fetch ( `${ getApi } /user/auth/logout` , {
41+ method : 'POST' ,
42+ credentials : 'include' ,
43+ } ) ;
44+ set ( { user : null , isLoggedIn : false } ) ;
45+ } catch ( err ) {
46+ console . error ( '로그아웃 실패' , err ) ;
47+ } finally {
48+ set ( { user : null , isLoggedIn : false } ) ;
49+ }
50+ } ,
5251
53- updateUser : async ( ) => {
54- try {
55- const res = await fetch ( `${ getApi } /user/auth/refresh` , {
56- method : 'POST' ,
57- credentials : 'include' ,
58- headers : { 'Content-Type' : 'application/json' } ,
59- } ) ;
52+ // idle + refresh 시 호출
53+ updateUser : async ( ) => {
54+ try {
55+ const res = await fetch ( `${ getApi } /user/auth/refresh` , {
56+ method : 'POST' ,
57+ credentials : 'include' ,
58+ headers : { 'Content-Type' : 'application/json' } ,
59+ } ) ;
6060
61- if ( ! res . ok ) throw new Error ( '토큰 갱신 실패' ) ;
62- const data = await res . json ( ) ;
63- const userInfo = data ?. data ?. user ;
64- const accessToken = data ?. data ?. accessToken ;
61+ if ( ! res . ok ) throw new Error ( '토큰 갱신 실패' ) ;
6562
66- if ( userInfo && accessToken ) {
67- set ( { user : userInfo , accessToken, isLoggedIn : true } ) ;
68- return userInfo ;
69- }
70- return null ;
71- } catch ( err ) {
72- console . error ( 'updateUser 실패' , err ) ;
73- set ( { accessToken : null , user : null , isLoggedIn : false } ) ;
74- return null ;
75- }
76- } ,
77- } ) ,
78- { name : 'auth-storage' } // localStorage key
79- )
80- ) ;
63+ const data = await res . json ( ) ;
64+ const userInfo = data ?. data ?. user ;
65+
66+ if ( userInfo ) {
67+ set ( { user : userInfo , isLoggedIn : true } ) ;
68+ return userInfo ;
69+ }
70+ return null ;
71+ } catch ( err ) {
72+ console . error ( 'updateUser 실패' , err ) ;
73+ set ( { user : null , isLoggedIn : false } ) ;
74+ return null ;
75+ }
76+ } ,
77+
78+ // 시작 시 로그인 상태 확인
79+ checkAuth : async ( ) => {
80+ try {
81+ const res = await fetch ( `${ getApi } /user/auth/me` , {
82+ method : 'GET' ,
83+ credentials : 'include' ,
84+ } ) ;
85+ if ( ! res . ok ) throw new Error ( '인증 실패' ) ;
86+
87+ const data = await res . json ( ) ;
88+ const userInfo = data ?. data ?. user ;
89+ if ( userInfo ) {
90+ set ( { user : userInfo , isLoggedIn : true } ) ;
91+ return userInfo ;
92+ }
93+ return null ;
94+ } catch {
95+ set ( { user : null , isLoggedIn : false } ) ;
96+ return null ;
97+ }
98+ } ,
99+ } ) ) ;
0 commit comments