@@ -33,7 +33,7 @@ function getTokenExpiryTime(token: string | null): number {
3333
3434export function AuthProvider ( { children } : { children : React . ReactNode } ) {
3535 const [ user , setUser ] = useState < User | null > ( null ) ;
36- const [ isLoadingUser , setIsLoadingUser ] = useState < boolean > ( false ) ;
36+ const [ isLoadingUser , setIsLoadingUser ] = useState < boolean > ( true ) ;
3737 const [ errorMessage , setErrorMessage ] = useState < string | null > ( null ) ;
3838 const [ accessToken , setAccessToken ] = useState < string | null > ( null ) ;
3939 const { getRefreshToken, setRefreshToken, deleteRefreshToken } =
@@ -44,14 +44,8 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
4444 const handleRefreshToken = useCallback ( async ( ) => {
4545 if ( getTokenExpiryTime ( accessToken ) > refreshTimeOffset ) return ;
4646
47- const refreshToken = await getRefreshToken ( ) ;
48-
49- if ( ! refreshToken ) {
50- throw new Error ( "Could not find refresh token on device" ) ;
51- }
52-
5347 const response = await axios . post ( `${ API_URL } /auth/refresh` , {
54- refreshToken : refreshToken ,
48+ refreshToken : await getRefreshToken ( ) ,
5549 } ) ;
5650
5751 if ( response . status === 200 ) {
@@ -75,7 +69,6 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
7569 } , [ accessToken , handleRefreshToken ] ) ;
7670
7771 // set up axios interceptors for handling access / refresh tokens (set up once)
78- // for some reason it gets rendered twice?
7972 useEffect ( ( ) => {
8073 const req = api . interceptors . request . use (
8174 ( config : InternalAxiosRequestConfig ) : InternalAxiosRequestConfig => {
@@ -104,7 +97,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
10497 const res = api . interceptors . response . use (
10598 ( response ) => response ,
10699 async ( error ) => {
107- console . log ( "response axios error:" , error ) ;
100+ console . log ( "error:" , error ) ;
108101 const originalRequest = error . config ;
109102
110103 if (
@@ -137,14 +130,13 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
137130 } , [ handleRefreshToken ] ) ;
138131
139132 useEffect ( ( ) => {
140- const loginFromStorage = async ( ) => {
133+ const validateUser = async ( ) => {
141134 const refreshToken = await getRefreshToken ( ) ;
142135 if ( ! refreshToken ) {
143136 setUser ( null ) ;
144137 return ;
145138 }
146139 try {
147- setIsLoadingUser ( true ) ;
148140 const response = await api . post ( "/auth/refresh" , {
149141 refreshToken,
150142 } ) ;
@@ -164,8 +156,8 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
164156 }
165157 } ;
166158
167- loginFromStorage ( ) ;
168- } , [ getRefreshToken ] ) ;
159+ validateUser ( ) ;
160+ } , [ ] ) ;
169161
170162 const getUserInfo = async ( token : string ) : Promise < User > => {
171163 try {
@@ -195,7 +187,6 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
195187 passwordConfirmation : string
196188 ) : Promise < void > => {
197189 try {
198- setIsLoadingUser ( true ) ;
199190 const registerResponse = await api . post ( "/auth/register" , {
200191 email,
201192 name,
@@ -207,6 +198,8 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
207198 registerResponse . data ;
208199 tokenRef . current = registerJson . accessToken ;
209200 setUser ( await getUserInfo ( registerJson . accessToken ) ) ;
201+
202+ // store only refresh token
210203 setRefreshToken ( registerJson . refreshToken ) ;
211204 } catch ( error : any ) {
212205 if ( error . response ) {
@@ -217,14 +210,11 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
217210 } else {
218211 setErrorMessage ( error . message ) ;
219212 }
220- } finally {
221- setIsLoadingUser ( false ) ;
222213 }
223214 } ;
224215
225216 const login = async ( email : string , password : string ) : Promise < void > => {
226217 try {
227- setIsLoadingUser ( true ) ;
228218 const loginResponse = await api . post ( "/auth/login" , {
229219 email,
230220 password,
@@ -234,6 +224,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
234224 loginResponse . data ;
235225 tokenRef . current = loginData . accessToken ;
236226 setUser ( await getUserInfo ( loginData . accessToken ) ) ;
227+
237228 setRefreshToken ( loginData . refreshToken ) ;
238229 } catch ( error : any ) {
239230 if ( error . response ) {
@@ -244,8 +235,6 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
244235 } else {
245236 setErrorMessage ( error . message ) ;
246237 }
247- } finally {
248- setIsLoadingUser ( false ) ;
249238 }
250239 } ;
251240
0 commit comments