fix: implement Blazor-native login form to properly update authentication state
TaxBaik CI/CD / build-and-deploy (push) Successful in 2m26s

Problem: JavaScript login form saved tokens to localStorage but didn't notify
CustomAuthenticationStateProvider, causing [Authorize] pages to remain in
'loading' state indefinitely. The provider only reads tokens when:
1. GetAuthenticationStateAsync() is called (page load)
2. NotifyAuthenticationStateChanged() is triggered (UI updates)

But JavaScript login didn't trigger either, leaving the authentication state
stale.

Solution: Convert AdminLoginForm from HTML+JavaScript to pure Blazor component.
Now the login flow is:
1. User enters credentials in Blazor form
2. HttpClient POST to /api/auth/login
3. Save tokens to localStorage
4. Call CustomAuthenticationStateProvider.LoginAsync() directly
5. Blazor detects auth state change and re-evaluates [Authorize] pages
6. Dashboard [Authorize] page renders successfully

Result: Immediate authentication state update, no loading timeout on protected pages.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-07-03 13:03:53 +09:00
parent 041d3cae96
commit 40cffb3beb
326 changed files with 327714 additions and 47 deletions
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="custom-logo" viewBox="0 0 176 32">
<path d="M50.57 23.14C49.55 23.14 48.63 22.97 47.81 22.64C47 22.31 46.35 21.81 45.85 21.16C45.37 20.51 45.12 19.72 45.09 18.8H48.73C48.79 19.32 48.97 19.72 49.27 20C49.58 20.27 49.98 20.4 50.47 20.4C50.98 20.4 51.38 20.29 51.67 20.06C51.97 19.82 52.11 19.49 52.11 19.08C52.11 18.73 51.99 18.45 51.75 18.22C51.53 17.99 51.24 17.81 50.89 17.66C50.56 17.51 50.08 17.35 49.45 17.16C48.55 16.88 47.81 16.6 47.23 16.32C46.66 16.04 46.17 15.63 45.75 15.08C45.34 14.53 45.13 13.82 45.13 12.94C45.13 11.63 45.61 10.61 46.55 9.88C47.5 9.13 48.73 8.76 50.25 8.76C51.8 8.76 53.05 9.13 53.99 9.88C54.94 10.61 55.45 11.64 55.51 12.96H51.81C51.79 12.51 51.62 12.15 51.31 11.9C51.01 11.63 50.61 11.5 50.13 11.5C49.72 11.5 49.39 11.61 49.13 11.84C48.88 12.05 48.75 12.37 48.75 12.78C48.75 13.23 48.97 13.59 49.39 13.84C49.82 14.09 50.49 14.37 51.39 14.66C52.3 14.97 53.03 15.26 53.59 15.54C54.17 15.82 54.66 16.23 55.07 16.76C55.49 17.29 55.69 17.98 55.69 18.82C55.69 19.62 55.49 20.35 55.07 21C54.67 21.65 54.09 22.17 53.31 22.56C52.54 22.95 51.63 23.14 50.57 23.14Z" fill="currentColor"/>
<path d="M72.04 11.72C73.42 11.72 74.52 12.14 75.34 12.98C76.16 13.82 76.58 14.99 76.58 16.48V23H73.18V16.94C73.18 16.22 72.98 15.67 72.6 15.28C72.22 14.88 71.7 14.68 71.04 14.68C70.37 14.68 69.84 14.88 69.46 15.28C69.08 15.67 68.9 16.22 68.9 16.94V23H65.5V16.94C65.5 16.22 65.3 15.67 64.92 15.28C64.54 14.88 64.02 14.68 63.36 14.68C62.69 14.68 62.16 14.88 61.78 15.28C61.4 15.67 61.22 16.22 61.22 16.94V23H57.8V11.84H61.22V13.24C61.56 12.77 62.02 12.41 62.58 12.14C63.14 11.86 63.77 11.72 64.48 11.72C65.32 11.72 66.06 11.9 66.72 12.26C67.38 12.62 67.9 13.13 68.28 13.8C68.66 13.19 69.19 12.69 69.86 12.3C70.52 11.91 71.25 11.72 72.04 11.72Z" fill="currentColor"/>
<path d="M78.29 17.4C78.29 16.25 78.5 15.25 78.93 14.38C79.37 13.51 79.96 12.85 80.71 12.38C81.46 11.91 82.29 11.68 83.21 11.68C84 11.68 84.68 11.84 85.27 12.16C85.87 12.48 86.33 12.9 86.65 13.42V11.84H90.07V23H86.65V21.42C86.32 21.94 85.85 22.36 85.25 22.68C84.66 23 83.98 23.16 83.19 23.16C82.28 23.16 81.46 22.93 80.71 22.46C79.96 21.98 79.37 21.31 78.93 20.44C78.5 19.56 78.29 18.55 78.29 17.4ZM86.65 17.42C86.65 16.57 86.41 15.89 85.93 15.4C85.46 14.91 84.89 14.66 84.21 14.66C83.53 14.66 82.95 14.91 82.47 15.4C82 15.88 81.77 16.55 81.77 17.4C81.77 18.25 82 18.93 82.47 19.44C82.95 19.93 83.53 20.18 84.21 20.18C84.89 20.18 85.46 19.93 85.93 19.44C86.41 18.95 86.65 18.27 86.65 17.42Z" fill="currentColor"/>
<path d="M95.96 13.7C96.36 13.09 96.86 12.61 97.46 12.26C98.06 11.9 98.73 11.72 99.46 11.72V15.34H98.52C97.67 15.34 97.03 15.53 96.6 15.9C96.18 16.26 95.96 16.9 95.96 17.82V23H92.54V11.84H95.96V13.7Z" fill="currentColor"/>
<path d="M107.32 20.1V23H105.58C104.34 23 103.37 22.7 102.68 22.1C101.98 21.49 101.64 20.49 101.64 19.12V14.68H100.28V11.84H101.64V9.12H105.06V11.84H107.3V14.68H105.06V19.16C105.06 19.49 105.14 19.73 105.3 19.88C105.46 20.03 105.72 20.1 106.1 20.1H107.32Z" fill="currentColor"/>
<path d="M117.96 20.52H112.72L111.88 23H108.3L113.38 8.96H117.34L122.42 23H118.8L117.96 20.52ZM117.08 17.88L115.34 12.74L113.62 17.88H117.08Z" fill="currentColor"/>
<path d="M123.29 17.4C123.29 16.25 123.5 15.25 123.93 14.38C124.37 13.51 124.96 12.85 125.71 12.38C126.46 11.91 127.29 11.68 128.21 11.68C128.94 11.68 129.61 11.83 130.21 12.14C130.82 12.45 131.3 12.86 131.65 13.38V8.2H135.07V23H131.65V21.4C131.33 21.93 130.87 22.36 130.27 22.68C129.68 23 129 23.16 128.21 23.16C127.29 23.16 126.46 22.93 125.71 22.46C124.96 21.98 124.37 21.31 123.93 20.44C123.5 19.56 123.29 18.55 123.29 17.4ZM131.65 17.42C131.65 16.57 131.41 15.89 130.93 15.4C130.46 14.91 129.89 14.66 129.21 14.66C128.53 14.66 127.95 14.91 127.47 15.4C127 15.88 126.77 16.55 126.77 17.4C126.77 18.25 127 18.93 127.47 19.44C127.95 19.93 128.53 20.18 129.21 20.18C129.89 20.18 130.46 19.93 130.93 19.44C131.41 18.95 131.65 18.27 131.65 17.42Z" fill="currentColor"/>
<path d="M151.78 11.72C153.17 11.72 154.27 12.14 155.08 12.98C155.91 13.82 156.32 14.99 156.32 16.48V23H152.92V16.94C152.92 16.22 152.73 15.67 152.34 15.28C151.97 14.88 151.45 14.68 150.78 14.68C150.12 14.68 149.59 14.88 149.2 15.28C148.83 15.67 148.64 16.22 148.64 16.94V23H145.24V16.94C145.24 16.22 145.05 15.67 144.66 15.28C144.29 14.88 143.77 14.68 143.1 14.68C142.44 14.68 141.91 14.88 141.52 15.28C141.15 15.67 140.96 16.22 140.96 16.94V23H137.54V11.84H140.96V13.24C141.31 12.77 141.76 12.41 142.32 12.14C142.88 11.86 143.52 11.72 144.22 11.72C145.06 11.72 145.81 11.9 146.46 12.26C147.13 12.62 147.65 13.13 148.02 13.8C148.41 13.19 148.94 12.69 149.6 12.3C150.27 11.91 151 11.72 151.78 11.72Z" fill="currentColor"/>
<path d="M160.44 10.68C159.84 10.68 159.34 10.51 158.96 10.16C158.58 9.8 158.4 9.36 158.4 8.84C158.4 8.31 158.58 7.87 158.96 7.52C159.34 7.16 159.84 6.98 160.44 6.98C161.02 6.98 161.5 7.16 161.88 7.52C162.26 7.87 162.46 8.31 162.46 8.84C162.46 9.36 162.26 9.8 161.88 10.16C161.5 10.51 161.02 10.68 160.44 10.68ZM162.14 11.84V23H158.72V11.84H162.14Z" fill="currentColor"/>
<path d="M171.41 11.72C172.72 11.72 173.76 12.15 174.53 13C175.32 13.84 175.71 15 175.71 16.48V23H172.31V16.94C172.31 16.19 172.12 15.61 171.73 15.2C171.35 14.79 170.83 14.58 170.17 14.58C169.52 14.58 169 14.79 168.61 15.2C168.23 15.61 168.03 16.19 168.03 16.94V23H164.61V11.84H168.03V13.32C168.38 12.83 168.85 12.44 169.43 12.16C170.02 11.87 170.68 11.72 171.41 11.72Z" fill="currentColor"/>
<circle cx="14.0467" cy="16.5173" r="4.01435" fill="none" stroke="currentColor" style="stroke: var(--logo-color); fill: var(--logo-color-fill)"/>
<path d="M22.63 16C22.63 24.28 18.79 31 14.05 31C9.31 31 5.47 24.28 5.47 16C5.47 7.72 9.31 1 14.05 1C18.79 1 22.63 7.72 22.63 16Z" stroke="currentColor" stroke-width="1.5" style="stroke: var(--logo-color); fill: var(--logo-color-fill)"/>
<path d="M18.41 24.41C11.63 28.57 4.17 28.34 1.76 23.91C -0.66 19.48 2.89 12.51 9.68 8.35C16.47 4.19 23.93 4.42 26.34 8.85C28.75 13.28 25.2 20.25 18.41 24.41Z" stroke="currentColor" stroke-width="1.5" style="stroke: var(--logo-color); fill: var(--logo-color-fill)"/>
<path d="M18.41 8.35C25.2 12.51 28.75 19.48 26.34 23.91C23.93 28.34 16.47 28.57 9.68 24.41C2.89 20.25 -0.66 13.28 1.76 8.85C4.17 4.42 11.63 4.19 18.41 8.35Z" stroke="currentColor" stroke-width="1.5" style="stroke: var(--logo-color); fill: var(--logo-color-fill)"/>
</symbol>
</svg>

After

Width:  |  Height:  |  Size: 6.4 KiB