Gestione Refresh Token Completata !
This commit is contained in:
@@ -63,14 +63,14 @@ async function Request(type: string, path: string, payload: any): Promise<Types.
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'x-auth': userStore.x_auth_token,
|
||||
'x-refrTok': userStore.refreshToken,
|
||||
'x-refrtok': userStore.refreshToken,
|
||||
},
|
||||
})
|
||||
ricevuto = true
|
||||
// console.log('Request Response: ', response)
|
||||
// console.log(new Types.AxiosSuccess(response.data, response.status))
|
||||
|
||||
const setAuthToken = (path === '/updatepwd')
|
||||
const setAuthToken = (path === '/updatepwd') || (path === '/users/login')
|
||||
|
||||
// console.log('--------- 0 ')
|
||||
|
||||
@@ -80,7 +80,7 @@ async function Request(type: string, path: string, payload: any): Promise<Types.
|
||||
try {
|
||||
if (setAuthToken || (path === '/users/login')) {
|
||||
x_auth_token = String(response.headers['x-auth'])
|
||||
refreshToken = String(response.headers['x-refrTok'])
|
||||
refreshToken = String(response.headers['x-refrtok'])
|
||||
|
||||
if (x_auth_token === '') {
|
||||
userStore.setServerCode(toolsext.ERR_AUTHENTICATION)
|
||||
@@ -117,7 +117,7 @@ async function Request(type: string, path: string, payload: any): Promise<Types.
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'x-auth': userStore.x_auth_token,
|
||||
'x-refrTok': userStore.refreshToken,
|
||||
'x-refrtok': userStore.refreshToken,
|
||||
},
|
||||
})
|
||||
ricevuto = true
|
||||
@@ -128,7 +128,7 @@ async function Request(type: string, path: string, payload: any): Promise<Types.
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data',
|
||||
'x-auth': userStore.x_auth_token,
|
||||
'x-refrTok': userStore.refreshToken,
|
||||
'x-refrtok': userStore.refreshToken,
|
||||
},
|
||||
})
|
||||
ricevuto = true
|
||||
|
||||
@@ -18,6 +18,7 @@ import * as ApiTables from '@src/store/Modules/ApiTables'
|
||||
import sendRequest from './Inst-Pao'
|
||||
import Request from './Instance'
|
||||
import globalroutines from '../../globalroutines/index'
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
function ReceiveResponsefromServer(tablesync: string, nametab: string, method: string, risdata: any) {
|
||||
// console.log('ReceiveResponsefromServer', nametab, method, risdata)
|
||||
@@ -92,32 +93,45 @@ export const Api = {
|
||||
// Altrimenti, gestisci il caso di refreshToken scaduto o invalido, e.g., redirecting to login
|
||||
|
||||
try {
|
||||
const userStore = useUserStore()
|
||||
console.log('refreshToken')
|
||||
const response = await axios.post('/users/newTok', {
|
||||
refreshToken: localStorage.getItem(toolsext.localStorage.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 })
|
||||
|
||||
// Save the new access token in local storage
|
||||
localStorage.setItem(toolsext.localStorage.token, response.data.accessToken);
|
||||
if (response) {
|
||||
|
||||
// Reset the refresh token if it was reset by the server
|
||||
if (response.data.refreshToken) {
|
||||
localStorage.setItem(toolsext.localStorage.refreshToken, response.data.refreshToken);
|
||||
// Save the new access token in local storage
|
||||
localStorage.setItem(toolsext.localStorage.token, response.data.token);
|
||||
|
||||
// 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)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Return the new access token
|
||||
return response.data.accessToken;
|
||||
} 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(error)
|
||||
localStorage.removeItem(toolsext.localStorage.token)
|
||||
localStorage.removeItem(toolsext.localStorage.refreshToken)
|
||||
throw error
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
async SendReq(url: string, method: string, mydata: any, setAuthToken = false): Promise<Types.AxiosSuccess | Types.AxiosError> {
|
||||
async SendReq(url: string, method: string, mydata: any, setAuthToken = false, evitaloop = false): Promise<Types.AxiosSuccess | Types.AxiosError> {
|
||||
const mydataout = {
|
||||
...mydata,
|
||||
keyappid: process.env.PAO_APP_ID,
|
||||
@@ -129,13 +143,13 @@ export const Api = {
|
||||
|
||||
const userStore = useUserStore()
|
||||
const globalStore = useGlobalStore()
|
||||
// const $router = useRouter()
|
||||
const $router = useRouter()
|
||||
|
||||
userStore.setServerCode(tools.EMPTY)
|
||||
userStore.setResStatus(0)
|
||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||
return new Promise((resolve, reject) => sendRequest(url, method, mydataout)
|
||||
.then(async (res) => {
|
||||
.then((res) => {
|
||||
// console.log('status:', res.status)
|
||||
|
||||
setTimeout(() => {
|
||||
@@ -156,28 +170,13 @@ export const Api = {
|
||||
userStore.setAuth('', '')
|
||||
// $router.push('/signin')
|
||||
return reject({ code: toolsext.ERR_AUTHENTICATION })
|
||||
} else if (res.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_TOKEN_EXPIRED) {
|
||||
console.log('Token Expired')
|
||||
// Prova ad ottenere un nuovo token di accesso
|
||||
try {
|
||||
// Se il token è scaduto, allora faccio la richiesta di un NUOVO TOKEN, passandogli refreshToken
|
||||
const newAccessToken = await this.refreshToken();
|
||||
userStore.setAuth(newAccessToken, userStore.refreshToken);
|
||||
|
||||
// Riprova l'originale SendReq con il nuovo token.
|
||||
// Assicurati di evitare un loop infinito in caso di errori continui
|
||||
return resolve(this.SendReq(url, method, mydata, setAuthToken));
|
||||
} catch (error) {
|
||||
// Gestisci errore di refresh token (es. redirect a signin)
|
||||
return reject(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (tools.isDebug())
|
||||
console.log(' ----> ', res)
|
||||
return resolve(res)
|
||||
})
|
||||
.catch((error) => {
|
||||
.catch(async (error) => {
|
||||
setTimeout(() => {
|
||||
if (method === 'get') {
|
||||
globalStore.connData.downloading_server = -1
|
||||
@@ -187,6 +186,37 @@ export const Api = {
|
||||
}
|
||||
}, 1000)
|
||||
|
||||
if (error.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_TOKEN_EXPIRED) {
|
||||
console.log('Token Expired')
|
||||
// Prova ad ottenere un nuovo token di accesso
|
||||
try {
|
||||
// Se il token è scaduto, allora faccio la richiesta di un NUOVO TOKEN, passandogli refreshToken
|
||||
const newAccessToken = await this.refreshToken();
|
||||
if (newAccessToken) {
|
||||
userStore.setAuth(newAccessToken, userStore.refreshToken);
|
||||
|
||||
// Riprova l'originale SendReq con il nuovo token.
|
||||
// Assicurati di evitare un loop infinito in caso di errori continui
|
||||
if (!evitaloop)
|
||||
return resolve(this.SendReq(url, method, mydata, setAuthToken, true));
|
||||
} else {
|
||||
$router.push('/signin')
|
||||
}
|
||||
} catch (err2: any) {
|
||||
// Gestisci errore di refresh token (es. redirect a signin)
|
||||
console.error('err2', err2)
|
||||
if (err2 && err2.hasOwnProperty('code') && err2.code === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN) {
|
||||
// Forbidden
|
||||
// You probably is connectiong with other page...
|
||||
userStore.setServerCode(toolsext.ERR_AUTHENTICATION)
|
||||
userStore.setAuth('', '')
|
||||
return reject({ code: toolsext.ERR_AUTHENTICATION })
|
||||
}
|
||||
// return reject(err2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
console.log('ERROR', error)
|
||||
return reject(error)
|
||||
}))
|
||||
|
||||
@@ -4396,7 +4396,7 @@ export const tools = {
|
||||
},
|
||||
getheaders() {
|
||||
const userStore = useUserStore()
|
||||
return [{ name: 'x-auth', value: userStore.x_auth_token }, { name: 'x-refrTok', value: userStore.refreshToken }]
|
||||
return [{ name: 'x-auth', value: userStore.x_auth_token }, { name: 'x-refrtok', value: userStore.refreshToken }]
|
||||
},
|
||||
|
||||
getextfile(filename: string) {
|
||||
|
||||
@@ -196,7 +196,7 @@ export const useUserStore = defineStore('UserStore', {
|
||||
servercode: 0,
|
||||
resStatus: 0,
|
||||
x_auth_token: '',
|
||||
refreshToken: '',
|
||||
refreshToken: '',
|
||||
isLogged: false,
|
||||
isAdmin: false,
|
||||
isManager: false,
|
||||
@@ -1126,29 +1126,34 @@ export const useUserStore = defineStore('UserStore', {
|
||||
},
|
||||
|
||||
updateLocalStorage(myuser: IUserFields) {
|
||||
const globalStore = useGlobalStore()
|
||||
try {
|
||||
const globalStore = useGlobalStore()
|
||||
|
||||
const now = tools.getDateNow()
|
||||
const now = tools.getDateNow()
|
||||
|
||||
// const expirationDate = new Date(now.getTime() + myres.data.expiresIn * 1000);
|
||||
const expirationDate = new Date(now.getTime() * 1000)
|
||||
tools.localStSetItem(toolsext.localStorage.lang, this.lang)
|
||||
tools.localStSetItem(toolsext.localStorage.userId, myuser._id)
|
||||
tools.localStSetItem(toolsext.localStorage.username, myuser.username)
|
||||
tools.localStSetItem(toolsext.localStorage.name, myuser.name)
|
||||
tools.localStSetItem(toolsext.localStorage.surname, myuser.surname)
|
||||
tools.localStSetItem(toolsext.localStorage.perm, String(myuser.perm) || '')
|
||||
if (myuser.profile !== undefined) tools.localStSetItem(toolsext.localStorage.img, (myuser.profile.img) ? String(myuser.profile.img) || '' : '')
|
||||
else tools.localStSetItem(toolsext.localStorage.img, '')
|
||||
localStorage.setItem(toolsext.localStorage.token, this.x_auth_token)
|
||||
localStorage.setItem(toolsext.localStorage.refreshToken, this.refreshToken)
|
||||
localStorage.setItem(toolsext.localStorage.expirationDate, expirationDate.toString())
|
||||
tools.localStSetItem(toolsext.localStorage.isLogged, String(true))
|
||||
tools.localStSetItem(toolsext.localStorage.verified_email, String(myuser.verified_email))
|
||||
tools.localStSetItem(toolsext.localStorage.verified_by_aportador, String(myuser.verified_by_aportador))
|
||||
tools.localStSetItem(toolsext.localStorage.teleg_id, String(myuser.profile.teleg_id))
|
||||
tools.localStSetItem(toolsext.localStorage.made_gift, String(myuser.made_gift))
|
||||
tools.localStSetItem(toolsext.localStorage.wasAlreadySubOnDb, String(globalStore.wasAlreadySubOnDb))
|
||||
// const expirationDate = new Date(now.getTime() + myres.data.expiresIn * 1000);
|
||||
const expirationDate = new Date(now.getTime() * 1000)
|
||||
tools.localStSetItem(toolsext.localStorage.lang, this.lang)
|
||||
tools.localStSetItem(toolsext.localStorage.userId, myuser._id)
|
||||
tools.localStSetItem(toolsext.localStorage.username, myuser.username)
|
||||
tools.localStSetItem(toolsext.localStorage.name, myuser.name)
|
||||
tools.localStSetItem(toolsext.localStorage.surname, myuser.surname)
|
||||
tools.localStSetItem(toolsext.localStorage.perm, String(myuser.perm) || '')
|
||||
if (myuser.profile !== undefined) tools.localStSetItem(toolsext.localStorage.img, (myuser.profile.img) ? String(myuser.profile.img) || '' : '')
|
||||
else tools.localStSetItem(toolsext.localStorage.img, '')
|
||||
localStorage.setItem(toolsext.localStorage.token, this.x_auth_token)
|
||||
console.log('updateLocalStorage: salva refreshtoken', this.refreshToken)
|
||||
localStorage.setItem(toolsext.localStorage.refreshToken, this.refreshToken)
|
||||
localStorage.setItem(toolsext.localStorage.expirationDate, expirationDate.toString())
|
||||
tools.localStSetItem(toolsext.localStorage.isLogged, String(true))
|
||||
tools.localStSetItem(toolsext.localStorage.verified_email, String(myuser.verified_email))
|
||||
tools.localStSetItem(toolsext.localStorage.verified_by_aportador, String(myuser.verified_by_aportador))
|
||||
tools.localStSetItem(toolsext.localStorage.teleg_id, String(myuser.profile.teleg_id))
|
||||
tools.localStSetItem(toolsext.localStorage.made_gift, String(myuser.made_gift))
|
||||
tools.localStSetItem(toolsext.localStorage.wasAlreadySubOnDb, String(globalStore.wasAlreadySubOnDb))
|
||||
} catch (e) {
|
||||
console.error('updateLocalStorage', e)
|
||||
}
|
||||
},
|
||||
|
||||
setusersList(usersList: IUserFields[]) {
|
||||
@@ -1244,9 +1249,15 @@ export const useUserStore = defineStore('UserStore', {
|
||||
this.resStatus = status
|
||||
},
|
||||
|
||||
setRefreshToken(refreshToken: string) {
|
||||
this.refreshToken = refreshToken
|
||||
localStorage.setItem(toolsext.localStorage.refreshToken, refreshToken)
|
||||
console.log('setRefreshToken', refreshToken)
|
||||
},
|
||||
|
||||
setAuth(x_auth_token: string, refreshToken: string) {
|
||||
this.x_auth_token = x_auth_token
|
||||
this.refreshToken = refreshToken
|
||||
this.setRefreshToken(refreshToken)
|
||||
},
|
||||
|
||||
resetArrToken(arrtokens: IToken[]) {
|
||||
@@ -1434,7 +1445,7 @@ export const useUserStore = defineStore('UserStore', {
|
||||
globalStore.setleftDrawerOpen(localStorage.getItem(toolsext.localStorage.leftDrawerOpen) === 'true')
|
||||
globalStore.setCategorySel(localStorage.getItem(toolsext.localStorage.categorySel))
|
||||
|
||||
globalStore.checkUpdates()
|
||||
await globalStore.checkUpdates()
|
||||
}
|
||||
|
||||
const isok = await globalStore.loadAfterLogin()
|
||||
@@ -1496,6 +1507,10 @@ export const useUserStore = defineStore('UserStore', {
|
||||
isLogged = true
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (token) {
|
||||
isLogged = true
|
||||
}
|
||||
}
|
||||
} else {
|
||||
isLogged = tools.isLogged()
|
||||
|
||||
@@ -1646,6 +1646,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
|
||||
this.rightDrawerOpen = true
|
||||
return false
|
||||
} else {
|
||||
console.log('Sbianca cmq i dati')
|
||||
// Sbianca cmq i dati
|
||||
const token = localStorage.getItem(toolsext.localStorage.token)
|
||||
if (token) {
|
||||
@@ -1659,6 +1660,9 @@ export const useGlobalStore = defineStore('GlobalStore', {
|
||||
|
||||
return true
|
||||
}).then((res) => res).catch((error) => {
|
||||
if (error.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_TOKEN_EXPIRED) {
|
||||
|
||||
}
|
||||
console.log('error dbLoad', error)
|
||||
// userStore.setErrorCatch(error)
|
||||
this.serverError = true
|
||||
|
||||
Reference in New Issue
Block a user