[사용자 정보 및 로그아웃 처리 개선] 사용자 이름 접근 방식 수정 및 로그아웃 함수 비동기 처리 추가
This commit is contained in:
@@ -33,7 +33,7 @@
|
|||||||
<!-- 사용자 정보 및 드롭다운 -->
|
<!-- 사용자 정보 및 드롭다운 -->
|
||||||
<div class="user-menu-wrapper">
|
<div class="user-menu-wrapper">
|
||||||
<div class="user-info" @click="toggleDropdown">
|
<div class="user-info" @click="toggleDropdown">
|
||||||
<span class="user-name">{{ userStore.user?.name }}</span>
|
<span class="user-name">{{ userStore.name }}</span>
|
||||||
<div class="user-icon">
|
<div class="user-icon">
|
||||||
<svg
|
<svg
|
||||||
width="24"
|
width="24"
|
||||||
@@ -105,9 +105,9 @@ function handleClickOutside(event) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function logout() {
|
async function logout() {
|
||||||
userStore.logout();
|
|
||||||
showDropdown.value = false;
|
showDropdown.value = false;
|
||||||
|
await userStore.logout();
|
||||||
router.push("/login");
|
router.push("/login");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,5 +1,4 @@
|
|||||||
import { useRuntimeConfig } from "#imports";
|
import { useRuntimeConfig } from "#imports";
|
||||||
import { useUserStore } from "~/stores/user";
|
|
||||||
|
|
||||||
export const useApi = async <T>(
|
export const useApi = async <T>(
|
||||||
path: string,
|
path: string,
|
||||||
@@ -8,11 +7,10 @@ export const useApi = async <T>(
|
|||||||
body?: any;
|
body?: any;
|
||||||
query?: Record<string, any>;
|
query?: Record<string, any>;
|
||||||
headers?: HeadersInit;
|
headers?: HeadersInit;
|
||||||
|
credentials?: RequestCredentials;
|
||||||
} = {}
|
} = {}
|
||||||
): Promise<T> => {
|
): Promise<T> => {
|
||||||
const userStore = useUserStore();
|
|
||||||
const config = useRuntimeConfig();
|
const config = useRuntimeConfig();
|
||||||
|
|
||||||
const method = options.method ? options.method.toUpperCase() : "GET";
|
const method = options.method ? options.method.toUpperCase() : "GET";
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -22,18 +20,11 @@ export const useApi = async <T>(
|
|||||||
method: method as any,
|
method: method as any,
|
||||||
body: options.body,
|
body: options.body,
|
||||||
query: options.query,
|
query: options.query,
|
||||||
|
credentials: options.credentials || "include", // 쿠키 자동 전송
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: "Bearer " + userStore.token,
|
"Content-Type": "application/json",
|
||||||
...options.headers,
|
...options.headers,
|
||||||
},
|
},
|
||||||
onResponse({ response }) {
|
|
||||||
const authHeader = response.headers.get("Authorization");
|
|
||||||
|
|
||||||
if (authHeader && authHeader.startsWith("Bearer ")) {
|
|
||||||
const accessToken = authHeader.substring(7);
|
|
||||||
userStore.setToken(accessToken);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@@ -24,7 +24,6 @@ export const useUserStore = defineStore("user", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
console.log(data);
|
|
||||||
user.value = data;
|
user.value = data;
|
||||||
isLoggedIn.value = true;
|
isLoggedIn.value = true;
|
||||||
} else {
|
} else {
|
||||||
@@ -46,14 +45,18 @@ export const useUserStore = defineStore("user", () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const logout = () => {
|
const logout = async () => {
|
||||||
user.value = null;
|
try {
|
||||||
token.value = null;
|
await useApi("/members/logout", {
|
||||||
isLoggedIn.value = false;
|
method: "post",
|
||||||
|
});
|
||||||
// 로컬 스토리지에서 제거
|
} catch (error) {
|
||||||
localStorage.removeItem("user");
|
console.error("로그아웃 요청 실패:", error);
|
||||||
localStorage.removeItem("token");
|
} finally {
|
||||||
|
// 로컬 상태 정리
|
||||||
|
user.value = null;
|
||||||
|
isLoggedIn.value = false;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const checkAuth = () => {
|
const checkAuth = () => {
|
||||||
|
Reference in New Issue
Block a user