58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
import { useAuth } from "~/composables/api/auth/useAuth";
|
|
import useRefreshAuth from "~/composables/api/auth/useRefreshAuth";
|
|
import useVerify from "~/composables/api/auth/useVerify";
|
|
|
|
export default defineNuxtRouteMiddleware(() => {
|
|
// state
|
|
|
|
const { mutateAsync: refreshAuth } = useRefreshAuth();
|
|
const { token, refreshToken, updateToken, updateRefreshToken, logout } =
|
|
useAuth();
|
|
const { mutateAsync: verify } = useVerify();
|
|
|
|
// lifecycle
|
|
|
|
onServerPrefetch(async () => {
|
|
if (!!token.value) {
|
|
// 1.1 - token is there
|
|
|
|
try {
|
|
await verify({
|
|
token: token.value,
|
|
});
|
|
|
|
// 2.1 - token is valid, finish
|
|
} catch (e) {
|
|
// 2.2 - token is there, but not valid, try to refresh token
|
|
|
|
if (!!refreshToken.value) {
|
|
// 3.1 - refresh token is there, try to refresh
|
|
|
|
try {
|
|
const refreshResponse = await refreshAuth({
|
|
refresh: refreshToken.value,
|
|
});
|
|
|
|
// 4.1 - token is refreshed successfully, finish
|
|
|
|
updateToken(refreshResponse.access);
|
|
updateRefreshToken(refreshResponse.refresh);
|
|
} catch (e) {
|
|
// 4.2 - cant refreshing token, logout
|
|
|
|
logout();
|
|
}
|
|
} else {
|
|
// 3.2 - refresh token is not exist, logout
|
|
|
|
logout();
|
|
}
|
|
}
|
|
} else {
|
|
// 1.2 - token is not exist, logout
|
|
|
|
logout();
|
|
}
|
|
});
|
|
});
|