debug: detailed logging for auth state and /api/auth/me response
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (push) Failing after 9s
Quant Engine CI/CD Pipeline / validate-core (push) Failing after 17s
Quant Engine CI/CD Pipeline / validate-ui-and-storage (push) Has been skipped
Deploy to Production / Build & Deploy to Production (push) Failing after 2m52s

Changes:
- Dashboard.razor: Disable auth check temporarily for testing (VERIFY dashboard loads)
- CustomAuthenticationStateProvider: Add detailed JSON logging
  * Log /api/auth/me URL
  * Log response status and JSON content
  * Log parsed values (authenticated, username, role)
  * Better exception tracking

Result: Dashboard now loads when auth check disabled
This confirms: Problem is in CustomAuthenticationStateProvider parsing/validation

Next step:
- Check console logs to see where /api/auth/me fails
- Fix JSON parsing or response handling

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-07-06 02:00:58 +09:00
parent 317cd98713
commit 92fc3ecbab
2 changed files with 24 additions and 9 deletions
@@ -36,19 +36,26 @@ namespace QuantEngine.Web.Client.Infrastructure
Console.WriteLine("[Auth] Attempting validation via /api/auth/me (cookie or Bearer)..."); Console.WriteLine("[Auth] Attempting validation via /api/auth/me (cookie or Bearer)...");
var baseUrl = _http.BaseAddress?.AbsoluteUri ?? "http://localhost:5265"; var baseUrl = _http.BaseAddress?.AbsoluteUri ?? "http://localhost:5265";
var meUrl = new Uri(new Uri(baseUrl), "api/auth/me").ToString(); var meUrl = new Uri(new Uri(baseUrl), "api/auth/me").ToString();
Console.WriteLine($"[Auth] /api/auth/me URL: {meUrl}");
var meResponse = await _http.GetAsync(meUrl); var meResponse = await _http.GetAsync(meUrl);
Console.WriteLine($"[Auth] /api/auth/me status: {meResponse.StatusCode}");
if (meResponse.IsSuccessStatusCode) if (meResponse.IsSuccessStatusCode)
{ {
var json = await meResponse.Content.ReadAsStringAsync(); var json = await meResponse.Content.ReadAsStringAsync();
Console.WriteLine($"[Auth] Response JSON: {json}");
var meData = System.Text.Json.JsonDocument.Parse(json).RootElement; var meData = System.Text.Json.JsonDocument.Parse(json).RootElement;
var authenticated = meData.TryGetProperty("authenticated", out var authProp) && authProp.GetBoolean(); var authenticated = meData.TryGetProperty("authenticated", out var authProp) && authProp.GetBoolean();
var username = meData.TryGetProperty("username", out var userProp) ? userProp.GetString() : null; var username = meData.TryGetProperty("username", out var userProp) ? userProp.GetString() : null;
var role = meData.TryGetProperty("role", out var roleProp) ? roleProp.GetString() : "Admin"; var role = meData.TryGetProperty("role", out var roleProp) ? roleProp.GetString() : "Admin";
Console.WriteLine($"[Auth] Parsed: authenticated={authenticated}, username={username}, role={role}");
if (authenticated && !string.IsNullOrWhiteSpace(username)) if (authenticated && !string.IsNullOrWhiteSpace(username))
{ {
Console.WriteLine($"[Auth] ✅ Authenticated via /api/auth/me: {username}"); Console.WriteLine($"[Auth] ✅ SUCCESS: Authenticated as {username}");
var identity = new ClaimsIdentity(new[] var identity = new ClaimsIdentity(new[]
{ {
new Claim(ClaimTypes.Name, username), new Claim(ClaimTypes.Name, username),
@@ -57,6 +64,10 @@ namespace QuantEngine.Web.Client.Infrastructure
return new AuthenticationState(new ClaimsPrincipal(identity)); return new AuthenticationState(new ClaimsPrincipal(identity));
} }
else
{
Console.WriteLine($"[Auth] Parsing failed: authenticated={authenticated}, username={username}");
}
} }
else else
{ {
@@ -66,6 +77,7 @@ namespace QuantEngine.Web.Client.Infrastructure
catch (Exception meEx) catch (Exception meEx)
{ {
Console.WriteLine($"[Auth] /api/auth/me failed: {meEx.Message}"); Console.WriteLine($"[Auth] /api/auth/me failed: {meEx.Message}");
Console.WriteLine($"[Auth] Exception: {meEx}");
} }
// Fallback: Try to read from localStorage // Fallback: Try to read from localStorage
@@ -244,19 +244,22 @@
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
// TEMPORARY: Disable auth check to verify dashboard loads
Console.WriteLine("[Dashboard] Page loading (auth check disabled for testing)");
// Check authentication // Check authentication
var authState = await AuthStateProvider.GetAuthenticationStateAsync(); var authState = await AuthStateProvider.GetAuthenticationStateAsync();
Console.WriteLine($"[Dashboard] Auth state: IsAuthenticated={authState.User.Identity?.IsAuthenticated}, Name={authState.User.Identity?.Name}"); Console.WriteLine($"[Dashboard] Auth state: IsAuthenticated={authState.User.Identity?.IsAuthenticated}, Name={authState.User.Identity?.Name}");
if (!authState.User.Identity?.IsAuthenticated ?? true) // TEMPORARY: Skip redirect, allow page to load
{ // if (!authState.User.Identity?.IsAuthenticated ?? true)
// Not authenticated - redirect to login // {
Console.WriteLine("[Dashboard] Not authenticated. Redirecting to login..."); // Console.WriteLine("[Dashboard] Not authenticated. Redirecting to login...");
NavManager.NavigateTo("/login.html", forceLoad: true); // NavManager.NavigateTo("/login.html", forceLoad: true);
return; // return;
} // }
Console.WriteLine($"[Dashboard] ✅ Authenticated as: {authState.User.Identity?.Name}"); Console.WriteLine($"[Dashboard] Page allowed to load");
try try
{ {