diff options
| author | Chocolate Pie <106949016+chocolate-pie@users.noreply.github.com> | 2023-07-08 08:58:35 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-08 08:58:35 +0900 |
| commit | bd843863d029b72b4a9c0b97ee7296e4e60ad8d6 (patch) | |
| tree | 0ed5fddd0ae1b8a864f1c5db23f8a417ea550968 /packages/frontend/src | |
| parent | fix(backend): ジョブキュー再試行時のタイミングずれによる... (diff) | |
| download | misskey-bd843863d029b72b4a9c0b97ee7296e4e60ad8d6.tar.gz misskey-bd843863d029b72b4a9c0b97ee7296e4e60ad8d6.tar.bz2 misskey-bd843863d029b72b4a9c0b97ee7296e4e60ad8d6.zip | |
fix: 非ログイン時にクレデンシャルが必要なページに行くとエラーが出る問題を修正 (#10973)
* 非ログイン時にクレデンシャルが必要なページに行くとエラーが出る問題を修正 (misskey-dev/misskey#10922)
* Update CHANGELOG.md
* fix
* Update CHANGELOG.md
* Update CHANGELOG.md
Diffstat (limited to 'packages/frontend/src')
| -rw-r--r-- | packages/frontend/src/components/MkPageWindow.vue | 5 | ||||
| -rw-r--r-- | packages/frontend/src/nirax.ts | 14 | ||||
| -rw-r--r-- | packages/frontend/src/pages/not-found.vue | 9 | ||||
| -rw-r--r-- | packages/frontend/src/router.ts | 4 |
4 files changed, 23 insertions, 9 deletions
diff --git a/packages/frontend/src/components/MkPageWindow.vue b/packages/frontend/src/components/MkPageWindow.vue index 709b5a52df..08de5622f5 100644 --- a/packages/frontend/src/components/MkPageWindow.vue +++ b/packages/frontend/src/components/MkPageWindow.vue @@ -30,7 +30,8 @@ import MkWindow from '@/components/MkWindow.vue'; import { popout as _popout } from '@/scripts/popout'; import copyToClipboard from '@/scripts/copy-to-clipboard'; import { url } from '@/config'; -import { mainRouter, routes } from '@/router'; +import { mainRouter, routes, page } from '@/router'; +import { $i } from '@/account'; import { Router } from '@/nirax'; import { i18n } from '@/i18n'; import { PageMetadata, provideMetadataReceiver } from '@/scripts/page-metadata'; @@ -45,7 +46,7 @@ defineEmits<{ (ev: 'closed'): void; }>(); -const router = new Router(routes, props.initialPath); +const router = new Router(routes, props.initialPath, !!$i, page(() => import('@/pages/not-found.vue'))); let pageMetadata = $ref<null | ComputedRef<PageMetadata>>(); let windowEl = $shallowRef<InstanceType<typeof MkWindow>>(); diff --git a/packages/frontend/src/nirax.ts b/packages/frontend/src/nirax.ts index 40348ded17..3fa6bd55e2 100644 --- a/packages/frontend/src/nirax.ts +++ b/packages/frontend/src/nirax.ts @@ -2,7 +2,6 @@ import { EventEmitter } from 'eventemitter3'; import { Component, shallowRef, ShallowRef } from 'vue'; -import { pleaseLogin } from '@/scripts/please-login'; import { safeURIDecode } from '@/scripts/safe-uri-decode'; type RouteDef = { @@ -23,7 +22,7 @@ type ParsedPath = (string | { optional?: boolean; })[]; -export type Resolved = { route: RouteDef; props: Map<string, string>; child?: Resolved; }; +export type Resolved = { route: RouteDef; props: Map<string, string | boolean>; child?: Resolved; }; function parsePath(path: string): ParsedPath { const res = [] as ParsedPath; @@ -75,15 +74,19 @@ export class Router extends EventEmitter<{ public currentRef: ShallowRef<Resolved> = shallowRef(); public currentRoute: ShallowRef<RouteDef> = shallowRef(); private currentPath: string; + private isLoggedIn: boolean; + private notFoundPageComponent: Component; private currentKey = Date.now().toString(); public navHook: ((path: string, flag?: any) => boolean) | null = null; - constructor(routes: Router['routes'], currentPath: Router['currentPath']) { + constructor(routes: Router['routes'], currentPath: Router['currentPath'], isLoggedIn: boolean, notFoundPageComponent: Component) { super(); this.routes = routes; this.currentPath = currentPath; + this.isLoggedIn = isLoggedIn; + this.notFoundPageComponent = notFoundPageComponent; this.navigate(currentPath, null, false); } @@ -212,8 +215,9 @@ export class Router extends EventEmitter<{ throw new Error('no route found for: ' + path); } - if (res.route.loginRequired) { - pleaseLogin('/'); + if (res.route.loginRequired && !this.isLoggedIn) { + res.route.component = this.notFoundPageComponent; + res.props.set('showLoginPopup', true); } const isSamePath = beforePath === path; diff --git a/packages/frontend/src/pages/not-found.vue b/packages/frontend/src/pages/not-found.vue index 43dc41e7cc..d10f221b8c 100644 --- a/packages/frontend/src/pages/not-found.vue +++ b/packages/frontend/src/pages/not-found.vue @@ -10,8 +10,17 @@ <script lang="ts" setup> import { i18n } from '@/i18n'; import { definePageMetadata } from '@/scripts/page-metadata'; +import { pleaseLogin } from '@/scripts/please-login'; import { notFoundImageUrl } from '@/instance'; +const props = defineProps<{ + showLoginPopup?: boolean; +}>(); + +if (props.showLoginPopup) { + pleaseLogin('/'); +} + const headerActions = $computed(() => []); const headerTabs = $computed(() => []); diff --git a/packages/frontend/src/router.ts b/packages/frontend/src/router.ts index fe9bc5938e..8540d4320f 100644 --- a/packages/frontend/src/router.ts +++ b/packages/frontend/src/router.ts @@ -4,7 +4,7 @@ import { $i, iAmModerator } from '@/account'; import MkLoading from '@/pages/_loading_.vue'; import MkError from '@/pages/_error_.vue'; -const page = (loader: AsyncComponentLoader<any>) => defineAsyncComponent({ +export const page = (loader: AsyncComponentLoader<any>) => defineAsyncComponent({ loader: loader, loadingComponent: MkLoading, errorComponent: MkError, @@ -505,7 +505,7 @@ export const routes = [{ component: page(() => import('./pages/not-found.vue')), }]; -export const mainRouter = new Router(routes, location.pathname + location.search + location.hash); +export const mainRouter = new Router(routes, location.pathname + location.search + location.hash, !!$i, page(() => import('@/pages/not-found.vue'))); window.history.replaceState({ key: mainRouter.getCurrentKey() }, '', location.href); |