summaryrefslogtreecommitdiff
path: root/packages/frontend/src
diff options
context:
space:
mode:
authorChocolate Pie <106949016+chocolate-pie@users.noreply.github.com>2023-07-08 08:58:35 +0900
committerGitHub <noreply@github.com>2023-07-08 08:58:35 +0900
commitbd843863d029b72b4a9c0b97ee7296e4e60ad8d6 (patch)
tree0ed5fddd0ae1b8a864f1c5db23f8a417ea550968 /packages/frontend/src
parentfix(backend): ジョブキュー再試行時のタイミングずれによる... (diff)
downloadmisskey-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.vue5
-rw-r--r--packages/frontend/src/nirax.ts14
-rw-r--r--packages/frontend/src/pages/not-found.vue9
-rw-r--r--packages/frontend/src/router.ts4
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);