|
1 | 1 | <script context="module" lang="ts"> |
| 2 | + import { Auth, type User } from '../apis/auth'; |
| 3 | + const auth = new Auth(); |
| 4 | +
|
2 | 5 | export const load = async ({ url }) => { |
3 | 6 | const signinPath = url.pathname === '/search' ? url.pathname : undefined; |
4 | 7 | const u = new URLSearchParams(url.search); |
5 | | - const signin = u.get('signin'); |
| 8 | + const openSignInModal = u.get('signin'); |
| 9 | + const pathname = url.pathname; |
| 10 | +
|
| 11 | + if (auth.publicPaths.has(pathname)) { |
| 12 | + return { |
| 13 | + props: { |
| 14 | + signinPath: signinPath, |
| 15 | + pathname: url.pathname, |
| 16 | + openSignInModal: openSignInModal, |
| 17 | + authenticated: false |
| 18 | + } |
| 19 | + }; |
| 20 | + } |
6 | 21 |
|
7 | | - return { |
8 | | - props: { |
9 | | - signinPath: signinPath, |
10 | | - pathname: url.pathname, |
11 | | - openSignInModal: signin |
| 22 | + let s: number; |
| 23 | + try { |
| 24 | + const { data, status } = await auth.GetUserWithSession(); |
| 25 | + s = status; |
| 26 | + return { |
| 27 | + props: { |
| 28 | + signinPath: signinPath, |
| 29 | + pathname: url.pathname, |
| 30 | + openSignInModal: openSignInModal, |
| 31 | + user: data, |
| 32 | + authenticated: true |
| 33 | + } |
| 34 | + }; |
| 35 | + } catch (err) { |
| 36 | + if (err) { |
| 37 | + return { |
| 38 | + status: s, |
| 39 | + error: err, |
| 40 | + props: { |
| 41 | + signinPath: signinPath, |
| 42 | + pathname: url.pathname, |
| 43 | + openSignInModal: openSignInModal, |
| 44 | + authenticated: false |
| 45 | + } |
| 46 | + }; |
12 | 47 | } |
13 | | - }; |
| 48 | + } |
14 | 49 | }; |
15 | 50 | </script> |
16 | 51 |
|
17 | 52 | <script lang="ts"> |
18 | 53 | import '../app.css'; |
19 | 54 | import { onMount } from 'svelte'; |
20 | | - import { session } from '$app/stores'; |
21 | 55 | import Footer from '$lib/footer.svelte'; |
22 | 56 | import Navbar from '$lib/navbar.svelte'; |
23 | | - import { Auth } from '../apis/auth'; |
24 | | - export let pathname: string; |
| 57 | + import { session } from '$app/stores'; |
25 | 58 | export let signinPath: string; |
26 | 59 | export let openSignInModal: boolean; |
| 60 | + export let user: User; |
27 | 61 |
|
28 | | - const auth = new Auth(); |
29 | 62 | onMount(async () => { |
30 | | - if (!pathname || pathname === '/' || pathname === '/about' || pathname === '/faq') { |
31 | | - return; |
32 | | - } |
33 | | -
|
34 | | - const { data, status } = await auth.GetUserWithSession(); |
35 | | - if (status === 200) { |
| 63 | + if (user) { |
36 | 64 | // @ts-ignore |
37 | | - $session.user = data; |
| 65 | + $session.user = user; |
38 | 66 | // @ts-ignore |
39 | 67 | $session.authenticated = true; |
40 | 68 | return; |
41 | 69 | } |
| 70 | +
|
| 71 | + // @ts-ignore |
| 72 | + $session.authenticated = false; |
42 | 73 | }); |
43 | 74 | </script> |
44 | 75 |
|
|
0 commit comments