generated from VLADIMIR/template_frontend
add refresh
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
import { createEveningDetectiveServerClient, type EveningDetectiveServer } from "./generated/crabs/evening_detective_server";
|
||||
import { createHttpHandler } from "./generated/crabs/evening_detective_server/client";
|
||||
|
||||
|
||||
export function buildAuthClient(
|
||||
refreshTokens: () => Promise<boolean>,
|
||||
getToken: () => string | null,
|
||||
): EveningDetectiveServer {
|
||||
return createEveningDetectiveServerClient(
|
||||
createAuthHttpHandler(
|
||||
refreshTokens,
|
||||
createHttpHandler(
|
||||
getToken,
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
function createAuthHttpHandler(
|
||||
refreshTokens: () => Promise<boolean>,
|
||||
handler: (request: { path: string, method: string, body: string | null }) => Promise<unknown>
|
||||
): (request: { path: string, method: string, body: string | null }) => Promise<unknown> {
|
||||
return async (
|
||||
request: { path: string, method: string, body: string | null },
|
||||
) => {
|
||||
try {
|
||||
return await handler(request)
|
||||
} catch (error) {
|
||||
await refreshTokens()
|
||||
return await handler(request)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,20 +1,23 @@
|
||||
import { createEveningDetectiveServerClient, type EveningDetectiveServer } from ".";
|
||||
|
||||
type RequestType = {
|
||||
path: string;
|
||||
method: string;
|
||||
body: string | null;
|
||||
};
|
||||
|
||||
function createHttpHandler(
|
||||
baseURL: string,
|
||||
export function buildClient(
|
||||
getToken?: () => string | null,
|
||||
): (
|
||||
request: { path: string, method: string, body: string | null },
|
||||
) => Promise<unknown> {
|
||||
): EveningDetectiveServer {
|
||||
return createEveningDetectiveServerClient(
|
||||
createHttpHandler(
|
||||
getToken,
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
export function createHttpHandler(
|
||||
getToken?: () => string | null,
|
||||
): (request: { path: string, method: string, body: string | null }) => Promise<unknown> {
|
||||
return async (
|
||||
request: { path: string, method: string, body: string | null },
|
||||
) => {
|
||||
const baseURL = getURL()
|
||||
|
||||
// Формируем полный URL
|
||||
const url = `${baseURL}/${request.path}`;
|
||||
|
||||
@@ -36,6 +39,10 @@ function createHttpHandler(
|
||||
body: request.body, // body уже JSON-строка из генератора
|
||||
});
|
||||
|
||||
if (response.status == 401) {
|
||||
throw new Error("unauthorized");
|
||||
}
|
||||
|
||||
// Парсим ответ
|
||||
const data = await response.json();
|
||||
|
||||
@@ -47,14 +54,3 @@ function createHttpHandler(
|
||||
export function getURL(): string {
|
||||
return "http://localhost:8090"
|
||||
}
|
||||
|
||||
export function buildClient(
|
||||
getToken?: () => string | null,
|
||||
): EveningDetectiveServer {
|
||||
return createEveningDetectiveServerClient(
|
||||
createHttpHandler(
|
||||
getURL(),
|
||||
getToken,
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -11,19 +11,34 @@
|
||||
<p>
|
||||
{{ authStore.userRoles }}
|
||||
</p>
|
||||
|
||||
<button @click="getPermissions">Права</button>
|
||||
{{ permissions }}
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { buildAuthClient } from '@/api/auth_client';
|
||||
import router from '@/router';
|
||||
import { useAuthStore } from '@/stores/auth';
|
||||
import { ref } from 'vue';
|
||||
|
||||
const authStore = useAuthStore();
|
||||
|
||||
const client = buildAuthClient(authStore.refreshTokenAction, authStore.getToken)
|
||||
|
||||
const permissions = ref<string[]>([])
|
||||
|
||||
const goToLogout = () => {
|
||||
authStore.logout()
|
||||
|
||||
router.push('/login')
|
||||
}
|
||||
|
||||
async function getPermissions() {
|
||||
permissions.value = []
|
||||
const res = await client.GetPermissions({})
|
||||
permissions.value = res.permissions!
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
||||
|
||||
Reference in New Issue
Block a user