<script setup>
// Приём токена после /auth/callback: сервер отдаёт токен только пользователям
// с ролью admin+; передаётся он в URL-фрагменте (#), который не гуляет по
// серверным логам. Забираем, чистим адрес, идём куда собирались.
import { onMounted } from "vue";
import { useRouter } from "vue-router";
import { GnLoader } from "gnexus-ui-kit/vue";
import { setToken, setRefreshToken } from "../api.js";
const router = useRouter();
onMounted(() => {
let params = new URLSearchParams();
try {
params = new URLSearchParams(window.location.hash.replace(/^#/, ""));
} catch {
/* пустой/битый фрагмент — ниже уйдёт на /login */
}
const access = params.get("access_token");
if (access) {
setToken(access);
const refresh = params.get("refresh_token");
if (refresh) setRefreshToken(refresh);
}
// Чистим фрагмент из адресной строки сразу.
history.replaceState(null, "", window.location.pathname + window.location.search);
router.replace(access ? "/dashboard" : "/login");
});
</script>
<template>
<div class="callback-page">
<GnLoader />
</div>
</template>
<style scoped>
.callback-page {
min-height: 100vh;
display: grid;
place-items: center;
}
</style>