Newer
Older
gn-synapse / frontend / src / views / OauthCallbackView.vue
<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>