@@ -13,7 +13,7 @@ const ALLOWED_TAGS = [
1313 "JAVA" , "C" , "CPP" , "JPA" , "JAVASCRIPT" , "PYTHON" , "OOP" , "BIGDATA" , "SPRING" , "TYPESCRIPT" , "ML"
1414] ;
1515
16- // ✅ 흔한 표기 → ENUM 매핑(한국어/소문자/동의어 흡수)
16+ // ✅ 흔한 표기 → ENUM 매핑
1717const TAG_SYNONYM = {
1818 js : "JAVASCRIPT" , javascript : "JAVASCRIPT" , 자바스크립트 : "JAVASCRIPT" ,
1919 java : "JAVA" , 자바 : "JAVA" ,
@@ -31,15 +31,15 @@ function normalizeToEnumTag(raw) {
3131 if ( ! raw ) return null ;
3232 const k = raw . replace ( / ^ # / , "" ) . trim ( ) ;
3333 const keyLC = k . toLowerCase ( ) ;
34- if ( TAG_SYNONYM [ keyLC ] ) return TAG_SYNONYM [ keyLC ] ; // 동의어 우선
34+ if ( TAG_SYNONYM [ keyLC ] ) return TAG_SYNONYM [ keyLC ] ;
3535 const upper = k . toUpperCase ( ) ;
3636 return ALLOWED_TAGS . includes ( upper ) ? upper : null ;
3737}
3838
3939// 입력 문자열 → ENUM 배열(중복 제거, 최대 10개)
4040function parseTagsInput ( input ) {
4141 const list = input
42- . split ( / [ # , , , \s ] + / ) // 쉼표/공백/# 구분
42+ . split ( / [ # , , , \s ] + / )
4343 . map ( normalizeToEnumTag )
4444 . filter ( Boolean ) ;
4545 return Array . from ( new Set ( list ) ) . slice ( 0 , 10 ) ;
@@ -59,11 +59,12 @@ export default function CommunityWrite() {
5959 const [ content , setContent ] = useState ( defaultGuide ) ;
6060 const [ submitting , setSubmitting ] = useState ( false ) ;
6161
62- // 비회원 접근 차단(알림은 로그인 페이지에서 처리)
62+ // ✅ 비회원 접근 차단: 알림 + 커뮤니티 페이지로 이동
6363 useEffect ( ( ) => {
6464 const token = localStorage . getItem ( "token" ) ;
6565 if ( ! token ) {
66- navigate ( "/" , { replace : true , state : { reason : "auth-required" , from : location . pathname } } ) ;
66+ alert ( "로그인이 필요합니다." ) ;
67+ navigate ( "/community" , { replace : true , state : { from : location . pathname } } ) ;
6768 }
6869 } , [ navigate , location . pathname ] ) ;
6970
@@ -77,7 +78,7 @@ export default function CommunityWrite() {
7778 const handleSubmit = async ( ) => {
7879 const token = localStorage . getItem ( "token" ) ;
7980 if ( ! token ) {
80- navigate ( "/login" , { replace : true , state : { reason : "auth-required" , from : location . pathname } } ) ;
81+ // 🚨 여기서는 다시 알림 필요 없음 → 이미 진입 차단됨
8182 return ;
8283 }
8384
@@ -88,10 +89,8 @@ export default function CommunityWrite() {
8889 return ;
8990 }
9091
91- // ✅ 태그 정규화/검증 → ENUM 배열
9292 const tagArray = parseTagsInput ( tags ) ;
9393
94- // 사용자가 뭔가 입력했는데 결과가 0개면 허용값 아님
9594 if ( tags . trim ( ) && tagArray . length === 0 ) {
9695 alert ( `지원하는 태그만 사용할 수 있어요.\n허용값: ${ ALLOWED_TAGS . join ( ", " ) } ` ) ;
9796 return ;
@@ -114,10 +113,6 @@ export default function CommunityWrite() {
114113 body : JSON . stringify ( payload ) ,
115114 } ) ;
116115
117- if ( res . status === 401 || res . status === 403 ) {
118- navigate ( "/login" , { replace : true , state : { reason : "auth-required" , from : location . pathname } } ) ;
119- return ;
120- }
121116 if ( ! res . ok ) {
122117 const ct = res . headers . get ( "content-type" ) || "" ;
123118 const msg = ct . includes ( "application/json" ) ? ( await res . json ( ) ) . message : await res . text ( ) ;
0 commit comments