@@ -50,10 +50,12 @@ axios.interceptors.response.use(
5050 } ,
5151 ( error ) => {
5252 loaderStore . set ( false ) ;
53- const originalRequest = error ?. config ;
53+ const originalRequest = error ?. config || { } ;
54+ const user = getUserStore ( ) ;
5455
5556 // If token expired or 401 returned, attempt a single token refresh and retry requests in queue.
56- if ( ( error ?. response ?. status === 401 || isTokenExired ( ) ) && originalRequest ) {
57+ if ( ( error ?. response ?. status === 401 || isTokenExired ( user . expires ) ) && originalRequest && ! originalRequest . _retried ) {
58+ originalRequest . _retried = true ;
5759 return new Promise ( ( resolve , reject ) => {
5860 enqueue ( { config : originalRequest , resolve, reject } ) ;
5961 } ) ;
@@ -78,26 +80,29 @@ function enqueue(retryItem) {
7880
7981 // Start refresh token
8082 if ( ! isRefreshingToken ) {
81- isRefreshingToken = true ;
8283 const user = getUserStore ( ) ;
83-
84- refreshAccessToken ( user ?. token || '' )
85- . then ( ( newToken ) => {
86- isRefreshingToken = false ;
87- const promise = dequeue ( newToken ) ;
88- return promise ;
89- } )
90- . catch ( ( err ) => {
91- isRefreshingToken = false ;
92- // Reject all queued requests
93- while ( retryQueue . length > 0 ) {
94- const item = retryQueue . shift ( ) ;
95- if ( item ) {
96- item . reject ( err ) ;
84+ if ( ! isTokenExired ( user . expires ) ) {
85+ dequeue ( user . token ) ;
86+ } else {
87+ isRefreshingToken = true ;
88+ refreshAccessToken ( user ?. token || '' )
89+ . then ( ( newToken ) => {
90+ isRefreshingToken = false ;
91+ const promise = dequeue ( newToken ) ;
92+ return promise ;
93+ } )
94+ . catch ( ( err ) => {
95+ isRefreshingToken = false ;
96+ // Reject all queued requests
97+ while ( retryQueue . length > 0 ) {
98+ const item = retryQueue . shift ( ) ;
99+ if ( item ) {
100+ item . reject ( err ) ;
101+ }
97102 }
98- }
99- redirectToLogin ( ) ;
100- } ) ;
103+ redirectToLogin ( ) ;
104+ } ) ;
105+ }
101106 }
102107}
103108
@@ -122,9 +127,11 @@ function dequeue(newToken) {
122127 return chain ;
123128}
124129
125- function isTokenExired ( ) {
126- const user = getUserStore ( ) ;
127- return Date . now ( ) / 1000 > user . expires ;
130+ /**
131+ * @param {number } expires
132+ */
133+ function isTokenExired ( expires ) {
134+ return Date . now ( ) / 1000 > expires ;
128135}
129136
130137function redirectToLogin ( ) {
0 commit comments