nuxt-live-editor
Version:
My new Nuxt module
46 lines (45 loc) • 1.97 kB
JavaScript
import { useDirectusToken, useDirectus, useNuxtApp, useRoute, useRuntimeConfig } from "#imports";
import { storeToRefs } from "pinia";
import { ref } from "vue";
import { useLiveEditorStore } from "../stores/useLiveEditorStore.mjs";
import { useSettingPopup } from "../stores/useSettingPopup.mjs";
export const useUser = async () => {
const route = useRoute();
const { is_open_popup_login } = storeToRefs(useSettingPopup());
const { mode_login } = storeToRefs(useLiveEditorStore());
const config = useRuntimeConfig().public;
const { refreshTokens } = useDirectusToken();
const current_user = ref(null);
const directus = useDirectus();
try {
const cookie = useNuxtApp()._cookies;
const cookieAccessToken = config.directus?.cookieNameToken;
const cookieNameRefreshToken = config.directus?.cookieNameRefreshToken;
if (route.query?.live_authentication == "true") {
is_open_popup_login.value = true;
} else {
if (!cookieAccessToken || !cookieNameRefreshToken) throw new Error("Not cookie directus");
if (cookie[cookieAccessToken].value) {
const user = await directus("users/me?fields=*&fields=role.*&fields=companies.*");
if (user && user?.data) current_user.value = user.data;
return { current_user };
}
if (cookie[cookieNameRefreshToken].value) {
await refreshTokens();
console.log("Refresh auth !");
const user = await directus("users/me?fields=*&fields=role.*&fields=companies.*");
if (user && user?.data) current_user.value = user.data;
return { current_user };
}
if (!cookie[cookieAccessToken].value && !cookie[cookieNameRefreshToken].value) {
throw new Error("Error token in cookie");
}
}
} catch (e) {
if (route.query?.live_authentication == "true" && mode_login.value) {
is_open_popup_login.value = true;
}
console.info("Not auth ... ", e.message);
}
return { current_user };
};