티스토리 뷰






여기까지 따라오시느라 수고하셨습니다. 코드는 완성되었습니다.  앞서도 언급되었지만, Firebase Realtime Database특성상 권한 설정은 무척 중요합니다. 특히나 웹의 경우는 서버의 주요 로직들이 클라이언트에서 드러나기 때문입니다.

Realtime Database의 기본 권한은 Authentication 인증 받았을 때 읽기와 쓰기 허용입니다.
database.rules.json 파일에 Realtime Database 권한이 입력되어 있습니다. 해당 파일을 배포함으로써 권한 정보를 업데이트할 수 있습니다.

Firebase console 창을 통해서도 권한 룰을 변경할 수 있습니다. Firebase console 화면에서 Database항목 에서 규칙 탭으로 들어가면  권한을 변경할 수 있고, 시뮬레이터로 테스트도 가능합니다.




프로젝트 생성하고 나서 기본 룰은 Authentication 인증 받아야만 읽기와 쓰기가 가능한 룰입니다.




기본적인 rule 유형입니다. 

규칙 유형
.read
사용자가 데이터를 읽을 수 있는 조건을 기술합니다.
.write
사용자가 데이터를 쓸 수 있는 조건을 기술합니다.
.validate
값의 올바른 형식, 하위 속성을 갖는지 여부 및 데이터 유형을 정의합니다.
.indexOn
정렬 및 쿼리를 위해 색인화할 하위 항목을 지정합니다.

룰과 함께 정의할 때 사용되는 사전 정의된 변수 입니다.

사전 정의된 변수
Linux 기점을 기준으로 하는 현재 시간(밀리초)입니다. SDK의 firebase.database.ServerValue.TIMESTAMP로 생성한 타임스탬프를 검증하는 데 특히 유용합니다.
작업 시도 전에 Firebase 데이터베이스에 존재한 루트 경로를 나타내는 RuleDataSnapshot입니다.
작업 시도 후에 존재할 데이터를 나타내는 RuleDataSnapshot입니다. 새로 기록되는 데이터와 기존 데이터를 포함합니다.
작업 시도 전에 존재한 데이터를 나타내는 RuleDataSnapshot입니다.
ID 및 동적 하위 키를 나타내는 데 사용되는 와일드카드 경로입니다.
인증된 사용자의 토큰 페이로드를 나타냅니다.

제가 적용한 룰입니다. 




저도 더 연구해서 더욱 세세하게 권한을 줘야하겠지만, 일단 채팅앱에서 가장 핵심이되는 Messages 부분은 
RoomUsers아래 채팅방에 인원으로 등록되어 있지 않으면 읽기와 쓰기가 금지되어 있습니다.
".read": "root.child('RoomUsers').child($roomId).child(auth.uid).exists()",
 ".write": "root.child('RoomUsers').child($roomId).child(auth.uid).exists()",


채팅방 목록에 해당하는 UserRooms는 그 아래 키인 uid는 본인것만 읽을 수 있게 허용되어 있습니다.
".read": "$uid === auth.uid",

권한 부분은 조금 더 고민이 필요한 부분이 있는 듯 합니다. 

부족하지만 Firebase 채팅앱 예제가 마무리되었습니다. 부족한점도 많이 있을 듯 합니다. 부족한 점이 보이면 피드백 부탁드립니다~

완성된 소스는 아래의 링크에서 확인 가능합니다.  






  1. 예제 소개
  2. Firebase 설정하기
  3. Hosting을 활용한 프로젝트 준비 작업
  4. Authentication을 이용한 유저 가입 및 로그인 구현하기
  5. Realtime Database를 이용한 채팅기능 구현 - Reatime Database 특징 및 데이터 구조
  6. Realtime Database를 이용한 채팅기능 구현 - 유저데이터 저장하기
  7. Realtime Database를 이용한 채팅기능 구현 - 유저리스팅 화면
  8. Realtime Database를 이용한 채팅기능 구현 - 채팅화면 및 채팅메세지 리스팅
  9. Realtime Database를 이용한 채팅기능 구현 - 채팅메세지 전송기능
  10. Realtime Database를 이용한 채팅기능 구현 - 채팅방 리스팅화면
  11. Realtime Database를 이용한 채팅기능 구현 - 채팅방 초대 기능
  12. Realtime Database를 이용한 채팅기능 구현 - 접속 중인 유저 표시하기
  13. Storage를 이용한 파일 전송기능
  14. Cloud Messaging과 Functions을 이용한 푸시메세지 기능 - FCM Token 정보 저장
  15. Cloud Messaging과 Functions을 이용한 푸시메세지 기능 - Functions를 통한 FCM 발송
  16. Cloud Messaging과 Functions을 이용한 푸시메세지 기능 - Service worker를 이용한 FCM수신
  17. Realtime Database 권한 설정

 


댓글
댓글쓰기 폼