본문 바로가기

Web/React

[Clone Coding] Twitter - Nomad Coders

#1 SETUP

#1.1  Securing the Keys

-  .env 파일 만들어서 환경변수 따로 설정

-  무조건 REACT_APP_'KEY' 형태

-  gitignore에 .env 파일 추가 (key들을 github에 보이기 싫어서 정리한 것이라고 생각)

- 사용자들은 볼 수 있지만 그냥 github에서 key들이 보이지 않도록 정리한 것이다.

 

 



#1.2 Router SetUp
- 라우팅: 다른 주소에 따라 다른 뷰를 보여주는 것

리액트 자체에는 라우팅 기능이 내장되어있지 않기 때문에 직접 브라우저의 API를 사용하고

상태를 설정하여 다른 뷰를 보여주어야 한다.

- 인증(로그인) 여부에 따라 render시킬 routes가 달라지게 하자.
      → LogIn 되어 있으면 Home / LogIn 안되어 있으면 Auth


- Fragment: 여러 elements render하고 싶을 때 사용(부모 요소가 없을 때)


- <Switch></Switch>: 한 번에 하나의 Route만 볼 수 있게 해준다.

 

 

 


#2  Authentication

#2.0 Using Firebase Auth
- Router는 하나의 역할, 보여주는 역할만 하는 것이 좋기 때문에 Router에 있던 useState를

App.js로 옮긴다.


- <footer></footer> 
      → HTML <footer> 태그는 특정 section의 footer를 정의할 때 사용
      → <footer> 태그 내에는 다음과 같은 정보를 기입
            - 저자 정보
            - 저작권 정보
            - 연락처
            - 사이트맵(sitemap)
            - 페이지 맨 위로 돌아갈 수 있는 Top 버튼
            - 연관 페이지 등

- user를 가져와서 로그인 여부를 판단하도록 하는 것이 강의에서 auth 기능을 쓰는 목적

  → currentUser() 사용


- authService.currentUser를 isLoggedIn useState의 value값으로 준다.

  → useState는 user의 로그인 여부를 알 수 있게 된다.

 

 

 


#2.1 Login Form part One
- 두 개의 다른 onChange function을 만들지 않고 하나의 onChage function을 만들고

  name값에 따라 email과 password의 value 설정.


- input 변경 → onChange function 호출 → 입력한 input값들 state에 저장

  (name값에 따라 email 또는 password 값 설정)

 

 

 


#2.3 Creating Account
1)  createUserWithEmailAndPassword
-  이메일과 패스워드로 연결된 새로운 사용자 계정 만들기
-  사용자 계정을 성공적으로 만들면, 이 사용자는 어플리케이션에 로그인된다.
-  Log In 버튼의 value값을 newAccount값이 true면 Create Account,

   false면 Log In으로 설정.
-  onSubmit function에서 newAccount일 경우 create Account를 수행하고

    그렇지 않을 경우 Log In을 수행한다.

2) signInWithEmailAndPassword
- 이메일과 패스워드로 로그인하기 


》 persistence: 사용자들을 어떻게 기억할 것인지
      1) local(default값): 브라우저를 닫아도 사용자 정보 기억 
      2) session: 탭이 열려있는 동안 사용자 정보 기억
      3) none: 사용자를 기억하지 않는다. 페이지 새로고침 시 로그아웃

 

 


#2.4 Log In
- const [init, setInit] =useState(false);
      → firebase가 프로그램을 초기화하길 기다린다.


- onAuthStateChanged(): 사용자의 로그인 상태의 변화를 관찰하는 관찰자를 추가. 
     즉, onAuthStateChanged()는 event listener이고 유저의 상태가 변경되면

     그 변화를 알아차린다.

     → user의 상태가 변경되면 isLoggedIn값을 true로 set하고 Init값을 true로 set


- error handling
 ex) 이미 존재하는 계정과 같은 이메일로 계정을 생성하려 하면 오류 발생/6자리 미만으로

       비밀번호 설정하려 하면 오류 발생 

       → const [error, setError] = useState(''); 
            onSubmit의 try catch 구문 사용해 오류 발생 시  setError(error.message);

            error값을 error.message로 설정.
            submit 버튼 다음에 {error} 추가해 오류 발생 시 error값, 즉 오류 메시지가

            화면에 출력되도록 설정.

 

 

 



#2.5 Social Login
- Continue with Google과 Continue with Github버튼 클릭 시 onSocialClick function 실행

→ popup창 →  provider 생성, signInWithPopup() 실행


 



#2.6 Log Out
- 로그인했을 때 "Home으로 가기"와 "내 프로필로 가기"가 있는 navigation을 만든다.
     - Navigation.js에서 <Link></Link>를 이용해 "Home"을 클릭하면 "/"으로,

       "My Profile"을 클릭하면 "/profile"로 가도록 설정
     - Profile.js에 LogOut 버튼 만들고 클릭 시 authService.signOut() 실행


   → 여기까지 하면 Log Out 버튼 클릭 시 로그아웃은 되지만 그대로 Profile 화면에 있게 된다.
   → 로그아웃되면 Home 화면으로 돌아가게 하자.


   1) Redirection 이용
       <Redirect from="*" to="/" />
         → "/"이 아닌 다른 모든 route로 가게 되면 "/", 즉 Home으로 redirect 된다.

   2) Hook 이용 (useHistory)
        onLogOutClick에 history.push("/");

         → 로그아웃된 후 "/", 즉 Home으로 돌아간다.

 

 

 

 

 

 

 

 

 

Twitter Clone Coding - Nomad Coders

https://nomadcoders.co/nwitter/lobby

 

Watch Now - 노마드 코더 Nomad Coders

 

nomadcoders.co