diff --git a/.env.example b/.env.example
index 2601333..3679d11 100644
--- a/.env.example
+++ b/.env.example
@@ -9,6 +9,7 @@ DB_PORT=43119
# Auth
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=replace-with-random-password
+MEMBER_SESSION_SECRET=replace-with-random-password
# Upload
UPLOAD_DIR=/uploads
diff --git a/components/comments/PostComments.vue b/components/comments/PostComments.vue
new file mode 100644
index 0000000..96b7ee1
--- /dev/null
+++ b/components/comments/PostComments.vue
@@ -0,0 +1,305 @@
+
+
+
+
+
+
diff --git a/components/site/SiteHeader.vue b/components/site/SiteHeader.vue
index 1cc58e7..195dce4 100644
--- a/components/site/SiteHeader.vue
+++ b/components/site/SiteHeader.vue
@@ -4,6 +4,7 @@ const menuUserOpen = ref(false)
const userMenuRef = ref(null)
const userMenuToggleRef = ref(null)
const searchOpen = ref(false)
+const member = ref(null)
const { data: siteSettings } = await useFetch('/api/site-settings', {
default: () => ({
@@ -58,6 +59,31 @@ const toggleUserMenu = () => {
menuUserOpen.value = !menuUserOpen.value
}
+/**
+ * 회원 세션 정보를 조회한다.
+ * @returns {Promise}
+ */
+const fetchMember = async () => {
+ try {
+ member.value = await $fetch('/api/auth/me')
+ } catch {
+ member.value = null
+ }
+}
+
+/**
+ * 회원 로그아웃을 처리한다.
+ * @returns {Promise}
+ */
+const logoutMember = async () => {
+ await $fetch('/api/auth/logout', {
+ method: 'POST'
+ })
+ member.value = null
+ closeUserMenu()
+ await navigateTo('/')
+}
+
/**
* 문서 클릭 시 사용자 메뉴 외부 영역이면 메뉴를 닫는다.
* @param {MouseEvent} event - 클릭 이벤트
@@ -113,6 +139,7 @@ const onGlobalKeydown = (event) => {
}
onMounted(() => {
+ fetchMember()
document.addEventListener('click', onDocumentClick)
document.addEventListener('keydown', onGlobalKeydown)
})
@@ -170,9 +197,6 @@ onBeforeUnmount(() => {
Comments
+ {{ comments.length }} ++ {{ member.username || member.email }} 님으로 댓글 작성 +
+ ++ 댓글은 로그인한 회원만 작성할 수 있습니다. +
++ {{ errorMessage }} +
+ ++ 댓글을 불러오는 중입니다. +
+ ++-
+
+ {{ comment.user.username }}
+ {{ formatCommentDate(comment.createdAt) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ++ {{ comment.body }} +
+ ++ {{ replyErrorMessage }} +
++-
+
+ {{ reply.user.username }}
+ {{ formatCommentDate(reply.createdAt) }}
+
+
+
++ {{ reply.body }} +
++ 첫 댓글을 남겨보세요. +
+