1- import React , { useEffect , useState } from "react" ;
1+ import React , { useEffect , useState , useRef } from "react" ;
22import { useNavigate , useLocation } from "react-router-dom" ;
33import {
44 FaBold , FaItalic , FaStrikethrough , FaLink , FaPalette , FaCode , FaQuoteRight ,
55 FaImage , FaHeading , FaListUl , FaListOl , FaMinus
66} from "react-icons/fa" ;
77import "./CommunityWrite.css" ;
88import config from "../../config" ;
9+ import { promptLogin } from "../../utils/auth" ;
910
1011// ✅ 백엔드 ENUM과 일치하는 허용 태그
1112const ALLOWED_TAGS = [
@@ -47,6 +48,7 @@ function parseTagsInput(input) {
4748export default function CommunityWrite ( ) {
4849 const navigate = useNavigate ( ) ;
4950 const location = useLocation ( ) ;
51+ const loginPromptedRef = useRef ( false ) ;
5052
5153 const defaultGuide = `- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
5254- 마크다운, 단축키를 이용해서 편리하게 글을 작성할 수 있어요.
@@ -61,8 +63,9 @@ export default function CommunityWrite() {
6163 // ✅ 비회원 접근 차단: 알림 + 커뮤니티 페이지로 이동
6264 useEffect ( ( ) => {
6365 const token = localStorage . getItem ( "token" ) ;
64- if ( ! token ) {
65- alert ( "로그인이 필요합니다." ) ;
66+ if ( ! token && ! loginPromptedRef . current ) {
67+ loginPromptedRef . current = true ;
68+ promptLogin ( ) ;
6669 navigate ( "/community" , { replace : true , state : { from : location . pathname } } ) ;
6770 }
6871 } , [ navigate , location . pathname ] ) ;
@@ -77,7 +80,7 @@ export default function CommunityWrite() {
7780 const handleSubmit = async ( ) => {
7881 const token = localStorage . getItem ( "token" ) ;
7982 if ( ! token ) {
80- // 🚨 여기서는 다시 알림 필요 없음 → 이미 진입 차단됨
83+ promptLogin ( ) ;
8184 return ;
8285 }
8386
0 commit comments