- COMPLETAMENTO PASSAGGIO A VITE - versione 1.2.2:
- Sistemato RefreshToken - Integrato modifiche di PiuCheBuono - Aggiornato a Node 22 - Aggiornato Server a Mongodb 8.0.
This commit is contained in:
@@ -87,78 +87,75 @@ export const Api = {
|
||||
},
|
||||
|
||||
async refreshToken() {
|
||||
// Implementa la logica per ottenere un nuovo token utilizzando il refreshToken
|
||||
// Potrebbe essere una chiamata al server simile a sendRequest()
|
||||
// Se il refreshToken è valido, salva il nuovo token e restituiscilo
|
||||
// Altrimenti, gestisci il caso di refreshToken scaduto o invalido, e.g., redirecting to login
|
||||
|
||||
const userStore = useUserStore();
|
||||
try {
|
||||
const userStore = useUserStore()
|
||||
// console.log('refreshToken')
|
||||
const refrTok = localStorage.getItem(toolsext.localStorage.refreshToken)
|
||||
let response = null
|
||||
if (refrTok && refrTok !== 'undefined') {
|
||||
// console.log('refreshToken=', refrTok)
|
||||
response = await sendRequest('/users/newtok', 'POST', { refreshToken: refrTok })
|
||||
const refrTok = localStorage.getItem(toolsext.localStorage.refreshToken);
|
||||
|
||||
if (response) {
|
||||
if (!refrTok || refrTok === 'undefined') {
|
||||
throw new Error('Refresh token non disponibile');
|
||||
}
|
||||
|
||||
// Save the new access token in local storage
|
||||
localStorage.setItem(toolsext.localStorage.token, response.data.token);
|
||||
const response = await sendRequest('/users/newtok', 'POST', { refreshToken: refrTok });
|
||||
|
||||
// Reset the refresh token if it was reset by the server
|
||||
if (response.data.refreshToken) {
|
||||
// console.log('salva refreshtoken', response.data.refreshToken)
|
||||
userStore.setRefreshToken(response.data.refreshToken)
|
||||
}
|
||||
|
||||
// Return the new access token
|
||||
return response.data.token;
|
||||
} else {
|
||||
userStore.setAuth('', '')
|
||||
localStorage.removeItem(toolsext.localStorage.token)
|
||||
localStorage.removeItem(toolsext.localStorage.refreshToken)
|
||||
if (response && response.data) {
|
||||
// Salva il nuovo access token
|
||||
localStorage.setItem(toolsext.localStorage.token, response.data.token);
|
||||
|
||||
// Aggiorna il refresh token se fornito dal server
|
||||
if (response.data.refreshToken) {
|
||||
userStore.setRefreshToken(response.data.refreshToken);
|
||||
localStorage.setItem(toolsext.localStorage.refreshToken, response.data.refreshToken);
|
||||
}
|
||||
|
||||
return response.data.token;
|
||||
} else {
|
||||
throw new Error('Risposta del server non valida durante il refresh token');
|
||||
}
|
||||
} catch (error) {
|
||||
// Handle the error, for example by logging out the user
|
||||
console.error(error)
|
||||
localStorage.removeItem(toolsext.localStorage.token)
|
||||
localStorage.removeItem(toolsext.localStorage.refreshToken)
|
||||
throw error
|
||||
console.error('Errore durante il refresh token:', error);
|
||||
// Logout dell'utente in caso di errore critico
|
||||
userStore.setAuth('', '');
|
||||
localStorage.removeItem(toolsext.localStorage.token);
|
||||
localStorage.removeItem(toolsext.localStorage.refreshToken);
|
||||
throw error;
|
||||
}
|
||||
|
||||
},
|
||||
async checkTokenScaduto(status: number, evitaloop: boolean, resolve: any, reject: any, url: string, method: string, mydata: any, setAuthToken = false) {
|
||||
|
||||
const userStore = useUserStore()
|
||||
async checkTokenScaduto(status, evitaloop, resolve, reject, url, method, mydata, setAuthToken = false) {
|
||||
const userStore = useUserStore();
|
||||
|
||||
if (status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_TOKEN_EXPIRED) {
|
||||
try {
|
||||
console.log('Token Scaduto.')
|
||||
console.log('Token scaduto. Tentativo di refresh...');
|
||||
const newAccessToken = await this.refreshToken();
|
||||
|
||||
if (newAccessToken) {
|
||||
userStore.setAuth(newAccessToken, userStore.refreshToken);
|
||||
|
||||
if (!evitaloop) {
|
||||
console.log('uso il RefreshToken...')
|
||||
console.log('Nuovo token ottenuto. Riprovo la richiesta...');
|
||||
return resolve(this.SendReq(url, method, mydata, setAuthToken, true));
|
||||
}
|
||||
} else {
|
||||
// $router.push('/signin')
|
||||
// Se il refresh token fallisce, logout dell'utente
|
||||
userStore.setAuth('', '');
|
||||
return reject({ code: toolsext.ERR_AUTHENTICATION });
|
||||
}
|
||||
} catch (err2: any) {
|
||||
console.error('err2, Token Invalido', err2)
|
||||
if (err2?.code === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN) {
|
||||
userStore.setServerCode(toolsext.ERR_AUTHENTICATION)
|
||||
userStore.setAuth('', '')
|
||||
return reject({ code: toolsext.ERR_AUTHENTICATION })
|
||||
}
|
||||
}
|
||||
} catch (err2) {
|
||||
console.error('Errore durante il refresh token:', err2);
|
||||
|
||||
return null
|
||||
if (err2?.code === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN) {
|
||||
userStore.setServerCode(toolsext.ERR_AUTHENTICATION);
|
||||
userStore.setAuth('', '');
|
||||
return reject({ code: toolsext.ERR_AUTHENTICATION });
|
||||
}
|
||||
|
||||
// Gestione di altri errori critici
|
||||
return reject(err2);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
},
|
||||
|
||||
async SendReqBase(url: string, method: string, mydata: any, setAuthToken = false, evitaloop = false, myformdata?: any, responsedata?: any, options?: any): Promise<Types.AxiosSuccess | Types.AxiosError> {
|
||||
@@ -186,22 +183,20 @@ export const Api = {
|
||||
}
|
||||
}, 1000)
|
||||
|
||||
if (res.status) {
|
||||
userStore.setResStatus(res.status)
|
||||
if (res.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN) {
|
||||
userStore.setServerCode(toolsext.ERR_AUTHENTICATION)
|
||||
userStore.setAuth('', '')
|
||||
return reject({ code: toolsext.ERR_AUTHENTICATION })
|
||||
}
|
||||
if (res.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN) {
|
||||
userStore.setServerCode(toolsext.ERR_AUTHENTICATION);
|
||||
userStore.setAuth('', '');
|
||||
return reject({ code: toolsext.ERR_AUTHENTICATION });
|
||||
}
|
||||
|
||||
const ret = await this.checkTokenScaduto(res.status, evitaloop, resolve, reject, url, method, mydataout, setAuthToken)
|
||||
const ret = await this.checkTokenScaduto(res.status, evitaloop, resolve, reject, url, method, mydata, setAuthToken);
|
||||
if (ret) {
|
||||
return ret
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (tools.isDebug())
|
||||
console.log(' ----> ', res)
|
||||
|
||||
return resolve(res)
|
||||
})
|
||||
.catch(async (error) => {
|
||||
@@ -214,13 +209,15 @@ export const Api = {
|
||||
}
|
||||
}, 1000)
|
||||
|
||||
const ret = await this.checkTokenScaduto(error.status, evitaloop, resolve, reject, url, method, mydataout, setAuthToken)
|
||||
let ret = await this.checkTokenScaduto(error.status, evitaloop, resolve, reject, url, method, mydataout, setAuthToken)
|
||||
if (ret) {
|
||||
return ret
|
||||
} else {
|
||||
ret = await this.checkTokenScaduto(error.status, evitaloop, resolve, reject, url, method, mydataout, setAuthToken)
|
||||
}
|
||||
|
||||
console.log('ERROR', error)
|
||||
return reject(error)
|
||||
console.error('Errore nella richiesta:', error);
|
||||
return reject(error);
|
||||
}))
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user