forked from AcaMate/AcaMate_Web
1. 쿠키만 사용하던 저장 동작을 다른 저장소도 사용하게 변경 1.1. 쿠키 대신 세션 레포지토리를 기본적으로 사용하게 Service 코드 구현 2. 로그인 되었을 경우 화면 표기 변경 2.1. 시작하기 버튼 hidden 처리 2.2. 사용자 이름 불러오기 2.3. 로그인 동작 관련 변수 스토리지 저장 2.4. 서버에서 직접적인 크라이언트 쿠키 저장이 아닌 서버는 뒤의 값으로 간섭하게 변경
139 lines
5.4 KiB
C#
139 lines
5.4 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 = 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<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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
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");
|
|
}
|
|
} |