SHcommit / LearnMoreSwiftInUdemy

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Clone/Instagram] Firebase 구현 | 복습 & 새롭게 알게된 개념 #5

SHcommit opened this issue · comments

Firestore Database로 회원가입 구현

구현 영상

느낀점

이번에는 파이어베이스를 처음 다뤘기에 강의를 보며 구현했다. 하지만 계속 에러가 발생했다.( 데이터베이스에는 올라갔는데 AuthService.registerUser함수의 completion 클로저의 error.localizedDescription에서 에러가 발견됬다.)

새로 알게된 개념

  • firestore에서 저장하는 방법

Firestore.firestore().collection("users").document(uid).setData(data, completion: completion)

  1. collection이름 정의 -> users로 정함
  2. 도큐먼트 이름 정의 -> uid로 값을 가짐
  3. 도큐먼트에 해당하는 데이터 정의 ->data는 RegistrationViewModel 모델임

  • 로그인시 정보를 어떻게 처리해야하는가?
  1. 로그인 버튼이 눌릴시 사용자의 로그인 정보가 있다. 이 정보를 파베에 바로 업로드 하기 전에 우선 이미지를 따로 처리 해야 한다. 로그인 이메일 비번 등의 정보는 Firebase Database에 저장하는데 이때 사용자의 이미지의 경우 UIImage가 들어갈 순 없어서 data나 url 주소를 JSON으로 처리한다. 이미지는 Storage에 따로 저장된다. 그래서 사용자의 로그인 정보를 먼저 처리하기 전에 이미지부터 Storage에 업로드 하고 성공적으로 파이어베이스에 업로드 됬다면 그 url을 포함해서 사용자의 회원가입 정보를 FirestoreDatabase에 올린다.

  2. 이미지 자체를 올리고 내려받을 경우에 용량이 크기 때문에 jpegData(compressionQuality:)를 통해 해상도를 약간 낮추어서 Storage().storage().reference(withPath:)를 통해 저장되는 경로를 지정한 후에 이 인스턴스를 통해 이미지를 파이어베이스에 올린다. 업로드된 이미지의 url또한 얻을 수 있다. 이 url을 포함해서 Firestore Database 필드에 사용자의 정보를 추가하면 된다.

사0

  1. Firestore Database 필드에 사용자 정보를 등록하기 위해
    Auth.auth().createUser(withEmail:password:)를 통해 먼저 사용자 등록을 통한 user 식별자를 생성한다.

createUser를 통해서 각 사용자는 자신만의 식별자를 가지게 된다. firestore()의 collection("users").document(uid).setData()에 사용자의 모든 정보를 저장하기에
users는 uid로 이루어져있고 그 uid는 .setdata 필드 정보를 기록하고 있다.

사2

createUser의 completion에서 에러가 없다면 사용자의 정보가 등록됨을 알 수 있다. 그 특별한 식별 인스턴스는 result?.user.uid로 얻을 수 있다.

재 정리하자면

위에서 언급한 2. 의 이미지 우선 업로드 이후에 url 정보를 포함한 사용자의 회원가입 data는 firestore Database에 저장할 것이다.

사1

이 구조는 firestore Database에서 구현한 구조이다.(RegistrationViewModel -> JSON)

파이어스토어는 다양한 컬랙션들을 만들 수 있다. (알림, 포스트, 사용자 정보 등등) (엔터티로 이해하고 싶네,,) 컬랙션은 Firestore.firestore().collection() 을 통해 만들 수 있다. 그리고 컬랙션에는 각각의 문서가 있다. 이 문서는 각각의 사용자 정보 테이블(필드)을 호출하기 위한 특별한 사용자의 식별자를 저장할 수 있다. document의 이름은 ..collection("users").document(특별한 사용자의 값) 을 통해 정의한 후에 이 특별한 사용자의 값에 JSON형식의 데이터를 저장한다.(필드)

한마디로 여러개의 주제로 나뉠 수 있는 컬랙션 집합 중 한 컬랙션은 이 컬랙션의 data modeling 엔터티를 바탕으로 다양하게 정의된 테이블들의 데이터(필드)가 존재하는데 테이블들을 가리킬 수 있는 게 문서다. 이 문서들로 특정한 한 컬랙션이 구성된다.

이 강의에선 컬랙션에 users라는 컬랙션을 추가하고 컬랙션을 구성하는 여러 문서는 uid를 통해서 문서를 구성한다. 근데 이 uid는 Auth.auth().createUser(withEmail:password:)를 통해 만들어진 고유의 식별자이므로 문서의 값들은 집합(Set)의 속성을 지니게 된다. 문서를 열어보면 필드가 나오는데 이 필드에 RegistrationViewModel의 특정 사용자 회원가입 데이터 JSON구조가 저장된다.

윽;; AuthService.registerUser(withUserInfo:)에서 파이어베이스에는 성공적으로 유저의 정보가 업로드 되는데 차꾸만 데이터베이스 nil처리가 되었다고 했는데 알고보니 에러처리를 잘못한 내 실수였다... 그래도 파이어베이스에 대해 좀 더 알아보게 되었다.


새롭게 알게된 개념

  • jpegData(compressionQuality)

원래는 pngData()를 사용했는데 이번에 새롭게 jpegData()에 대해 알게 됬다.

  • 파이어베이스 프로젝트 등록,,
  1. 프로젝트 생성
  2. Authentication에서 로그인 제공업체 지정
  3. storage bucket 설정. 앱에서 로그인 생성할 때 사진을 request했다면 따로 설정해줘야한다. Rules에서 사용자의 승인 전에 사진 업로드 할 수 있도록 setup해야한다.

allow read, write: if request.auth != null || request.auth == null ;

  1. db추가하는데 ios -> 번들아이디 등등 입력.