using Microsoft.AspNetCore.Components; using Microsoft.JSInterop; using System; using System.Net.Http.Json; using System.Text.Json; using Front.Program.Services; namespace Front.Program.Views.Project; public partial class TopProjectNav : ComponentBase { [Inject] NavigationManager NavigationManager { get; set; } = default!; [Inject] StorageService StorageService { get; set; } = default!; [Inject] SecureService SecureService { get; set; } = default!; [Inject] IJSRuntime JS { get; set; } = default!; [Inject] HttpClient Http { get; set; } = default!; string UserName { get; set; } = default!; protected bool isOpen = false; bool isLogin = false; protected override async Task OnInitializedAsync() { Console.WriteLine("TopNAV 확인"); isLogin = isLogin = bool.TryParse(await StorageService.GetItemAsync("IsLogin"), out var result) && result; if (isLogin) return; try { var encryptedName = await StorageService.GetItemAsync("USER"); Console.WriteLine($"{encryptedName}"); if (!string.IsNullOrEmpty(encryptedName)) { try { UserName = await SecureService.DecryptAsync(encryptedName); Console.WriteLine($"세션 스토리지에서 가져온 사용자 이름: '{UserName}'"); return; } catch (Exception ex) { Console.WriteLine($"이름 복호화 중 오류 발생: {ex.Message}"); await StorageService.RemoveItemAsync("USER"); } } // apiSender.js의 함수를 사용하여 연결 키 가져오기 var headerValue = await StorageService.GetItemAsync("Web_AM_Connect_Key"); Console.WriteLine($"세션 스토리지에서 가져온 헤더 값: '{headerValue}'"); if (string.IsNullOrEmpty(headerValue)) { Console.WriteLine("연결 키가 없습니다"); return; } // apiSender.js의 함수를 사용하여 API 호출 Console.WriteLine("세션 API 호출 시작"); var response = await JS.InvokeAsync("fetchWithHeaderAndReturnUrl", "/api/v1/in/user/auth/session", "GET", "Web_AM_Connect_Key", headerValue); Console.WriteLine($"세션 API 응답 타입: {response.ValueKind}"); Console.WriteLine($"세션 API 응답 내용: {response}"); if (response.ValueKind == JsonValueKind.Null || response.ValueKind == JsonValueKind.Undefined) { Console.WriteLine("응답이 null이거나 undefined입니다"); return; } try { if (response.TryGetProperty("status", out var statusElement)) { Console.WriteLine($"status 요소 타입: {statusElement.ValueKind}"); if (statusElement.TryGetProperty("code", out var codeElement)) { var code = codeElement.GetString(); Console.WriteLine($"응답 코드: {code}"); if (code == "000") { if (response.TryGetProperty("data", out var dataElement)) { Console.WriteLine($"data 요소 타입: {dataElement.ValueKind}"); if (dataElement.TryGetProperty("name", out var nameElement)) { UserName = nameElement.GetString() ?? "이름 없음"; isLogin = true; Console.WriteLine($"NM: {UserName}"); var encryptedUserName = await SecureService.EncryptAsync(UserName); Console.WriteLine($"NM: {encryptedUserName}"); await StorageService.SetItemAsync("USER", encryptedUserName); await StorageService.SetItemAsync("Web_AM_Connect_Key", headerValue); Console.WriteLine($"로그인된 사용자: {UserName}"); return; } } } } } Console.WriteLine("로그인되지 않은 상태"); } catch (Exception ex) { Console.WriteLine($"응답 처리 중 오류 발생: {ex.Message}"); Console.WriteLine($"응답 처리 스택 트레이스: {ex.StackTrace}"); } } catch (Exception ex) { Console.WriteLine($"세션 확인 중 오류 발생: {ex.Message}"); Console.WriteLine($"스택 트레이스: {ex.StackTrace}"); } } public void OnClickMenuDown() { isOpen = !isOpen; } public void OnClickRedirect() { if (isOpen) isOpen = !isOpen; NavigationManager.NavigateTo("/about"); } public void OnClickLogin() { if (isOpen) isOpen = !isOpen; NavigationManager.NavigateTo("/auth"); } }