AcaMate_Web/Program/Views/Project/TopProjectNav.razor.cs

163 lines
6.3 KiB
C#

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 = bool.TryParse(await StorageService.GetItemAsync("IsLogin"), out var result) && result;
// if (!isLogin && !string.IsNullOrEmpty(UserName)) return;
if (!isLogin) return; // && !string.IsNullOrEmpty(UserName)) 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<JsonElement>("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;
}
}
}
else {
if (isLogin) {
isLogin = false;
await StorageService.SetItemAsync("IsLogin","false");
}
}
}
}
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");
}
public async Task OnClickLogout()
{
// var isRemoved = await StorageService.RemoveItemAsync("USER");
if (await StorageService.RemoveItemAsync("IsLogin")) {
isLogin = false;
if (await StorageService.RemoveItemAsync("USER")) {
UserName = null;
Console.WriteLine("LOGOUT");
}
}
else
{
Console.WriteLine("로그아웃 처리 중 오류가 발생했습니다.");
}
}
}