169 похожих чатов

@Djaler @vklimv Товарищи, у меня всё ещё не получается решить мою

проблему с тем, что приложение после обновления страницы/перехода по ссылке не успело получить данные с backend о пользователе, а уже пускает его на страницу, куда якобы авторизованный пользователь не должен иметь доступ (/login).
Все примеры которые я посмотрел указывают на решение, которое вы вчера писали, но в нём не предполагается что нужно дождаться данных для того, чтобы в роутере они уже проверялись.
Подскажите пожалуйста, как это можно сделать правильно?

template App.vue
<template>
<div v-if="loaded">
<NavBar></NavBar>
<div class="app">
<router-view />
</div>
</div>
</template>

App.vue script
export default {
components: { NavBar },
data() {
return {
loaded: false,
};
},
mounted() {
console.log("mounted");
this.fetchUser().then(() => this.setLoaded());
},
methods: {
...mapActions({
fetchUser: "user/fetchUser",
}),
setLoaded() {
this.loaded = true;
},
},
};

store actions:
actions: {
async fetchUser({ commit }) {
const response = await profile();
if (response) commit("setUser", response);
},
},

user service
export const profile = async () => {
const response = await api
.get("api/user/profile")
.catch((e) => console.error(e));
return response.data || null;
};

index.js router:
router.beforeEach((to) => {
console.log("beforeEach", to.fullPath);
if (to.meta.disableIfAuthorized && store.getters["user/isAuthorized"]) {
console.log("disableIfAuthorized");
return {
path: "/",
};
}

if (to.meta.requiresAuth && !store.getters["user/isAuthorized"]) {
return {
path: "/login",
query: { redirect: to.fullPath },
};
}
});

13 ответов

48 просмотров

В App.vue рисуй спиннер пока грузишь эти данные, а потом уже рисуй router-view и проблема решена.

Stanislav Lashmanov
В App.vue рисуй спиннер пока грузишь эти данные, а...

Да я вот то же советовал, так и делает, но чет не получается говорит

Можешь банально сделать в main.js: await loadUser(); mountApp();

воу, я такого еще не видел, прикольно То есть в принципе нормально будет в main.js загрузить юзера, потом условно сетнуть в pinia его, и только потом замаунтить приложение? Или я может не так понял Но вроде в App.vue каком-то лучше это делать чтобы спинер показывать Но в принципе лоадер можно показывать и просто через index.html.. Снова несколько вариантов решения - какой из них лучше вообще?

Prototype- Автор вопроса
¿Сергей?
воу, я такого еще не видел, прикольно То есть в п...

Вот я тоже интересовался про vuex, допустим пользователь то загрузился до инициализации приложения, а как его потом в store засунуть

¿Сергей?
воу, я такого еще не видел, прикольно То есть в п...

Да одинаково, если это спа. Чтобы лоадер красиво выглядел - надо будет специально его дольше показывать, чем идет запрос. Иначе будет моргание

Prototype
Вот я тоже интересовался про vuex, допустим пользо...

Стор можно использовать без компонентов даже

Prototype- Автор вопроса
Volodymyr Klimov
Стор можно использовать без компонентов даже

Но как если он ещё не инициализирован?

Prototype- Автор вопроса
Volodymyr Klimov
А почему не инициализирован?

Если await loadUser(); createApp(App).use(store).use(router).mount("#app");

Если правильно вопрос понял, beforeEach же может быть асинхронным, а в нем можно чет типа такого наговнячить. Соответственно внутри можно подождать загрузки юзера и перекинуть на нужный роут.

Prototype- Автор вопроса
R.T
screenshot Если правильно вопрос понял, beforeEach же может б...

Этот вопрос повыше уже решили, но спасибо

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! procedure TForm1.FormCreate(Sender: TObject); type TStartEnd = record S: Byte; E: Byte; end; var a, b: TStartEnd; begin {1} a.S := 1; {2} a.E := 2; ...
Руслан Михайлович
10
Всем привет!) я тут новенький и пытаюсь освоить evolution методом тыка. У меня при переходе между папками файлов выскакивают вот такие уведомления Можете подсказать как их от...
Диман Samoed
10
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Карта сайта