163 lines
6.3 KiB
C#
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("로그아웃 처리 중 오류가 발생했습니다.");
|
|
}
|
|
}
|
|
} |