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