Supabase 댓글 추가 실패
- 에러 발생 로그
POST https://akqkaonphmdqozkinveg.supabase.co/rest/v1/comments 401 (Unauthorized) [CommentSection] 댓글 추가 실패: new row violates row-level security policy for table "comments"
- 에러 발생 시점
: CommentSection.jsx에서 댓글을 작성하고 추가하려는 시도 시 발생
- Supabase RLS(Row-Level Security) 정책 활성화
- comments 테이블에 Row-Level Security가 적용되어 있었음.
- INSERT 권한 정책 미설정
- comments 테이블에 정책이 설정 돼어 있지 않았음.
- supabase 클라이언트에서 인증 정보 누락 가능성
- 요청 시 인증 토큰이 포함되지 않으면 401 (Unauthorized) 에러 발생.
1. Supabase RLS 정책 수정 (로그인된 사용자만 댓글 작성 허용)
- SQL Editor에서 로그인된 사용자만 댓글 추가 가능하도록 정책 설정:
BEGIN; -- 로그인된 사용자만 댓글을 추가할 수 있도록 정책 추가 CREATE POLICY "Allow authenticated users to insert comments" ON comments FOR INSERT TO authenticated WITH CHECK (auth.uid() IS NOT NULL); COMMIT;
- authenticated 사용자만 INSERT 권한을 가짐.
- auth.id()를 통해 로그인된 사용자만 데이터 추가 가능.
2. 컴포넌트 내 supabase 클라이언트 코드 점검
- 로그인 상태 확인 후 댓글 추가하도록 수정
// 로그인된 사용자 여부 확인 const { data: user } = await supabase.auth.getUser(); if (!user) { alert('로그인이 필요합니다.'); return; } // 댓글 추가 const { data, error } = await supabase .from('comments') .insert([ { post_id: postId, user_id: user.id, content: comment, } ]); if (error) { console.error('댓글 추가 실패:', error.message); } else { console.log('댓글 추가 성공:', data); }
- 댓글 추가 전에 supabase.auth.getUser()를 사용해 로그인 여부 확인.
- user.id를 user_id 필드에 삽입.
- +게시물 접근 시 로그인 여부 확인(비로그인시 경고창 표시)
useEffect(() => { if (!isLogin) { errorAlert({ type: ALERT_TYPE.ERROR, content: '로그인이 필요합니다. 로그인 페이지로 이동합니다.', }).then((res) => { if (res.isConfirmed) navigate('/login', { replace: true }); }); } }, [isLogin, navigate, errorAlert]); // 로그인되지 않았으면 페이지 안보여주기 if (!isLogin) { return null; }
로그인 상태: 댓글 정상 추가 확인 ✅
로그아웃 상태: “로그인이 필요합니다” 경고창 (SWAL) 표시 ✅