본문 바로가기

Youtube Clone/User Authentication

Passport

  • Passport는 사용자 인증을 구현하는데 사용하는 미들웨어
    • Passport는 쿠키를 생성하고, 브라우저에 저장하고, 유저에게 전용 쿠키를 준다. 
    • 쿠키에는 백엔드로 전송될 정보들이 담겨있다.
    • 서버에 뭔가 요청할 때마다(로그인, 프로필 편집 등등) 브라우저가 쿠키들을 서버로 전송한다. 
    • Passport가 자동으로 쿠키를 가져와서 인증이 완료된 User object를 controller에 넘겨준다.
    • npm i passport passport-local
  • User 모델: 이름, 이메일, 페이스북, 아바타 URL 등 사용자의 정보를 담고 있다.
  • 이름과 이메일을 입력하면 계정을 생성하고, 이를 등록한다. 
  • 가입시킨 뒤에 자동으로 로그인시킨다. globalRouter.post(routes.join, postJoin, postLogin);
  • strategy는 사용자 인증 방식
    • 아이디와 비밀번호를 이용하거나, 페이스북 아이디, 카카오톡 아이디를 이용하는 등
    • passport-local은 해당 사이트의 아이디와 비밀번호를 이용하는 사용자 인증 방식

model/User.js
globalController.js - postJoin
globalController.js - postLogin

  • passport는 serializeUser와 deserializeUser 기능을 가지고 있다.
    • serialization은 쿠키에게 어떤 정보를 줄 것인가? 
    • deserialization은 어느 사용자인지 어떻게 찾는가?
    • 이 과정들은 passport-local-mongoose가 대신 해준다!
    • npm install passport-local-mongoose

passport.js

  • 일반적으로 쿠키에 user.id를 담고, 그 다음에 id로 사용자를 식별하기 때문에 우리도 그렇게 한다. 
    • 이 쿠키는 express로 보내지고, express는 session을 이용해 쿠키를 얻는다. session은 쿠키를 해독한다. 
    • 그리고 해독된 아이디는 passport로 넘어가고, deserialize를 진행해 유저를 식별한다. 
    • 그럼 passport는 그 사용자를 routes의 request object에 할당한다.
    • npm install express-session
  • express-session의 중요한 기능: secret
    • 쿠키에 들어있는 session ID를 암호화하기 위한 것. 
    • 무작위 문자열을 이용해 ID를 암호화된 상태로 전송한다. 
    • 문자열은 randomkeygen.com > Codeigniter Encryption Keys 에서 만들 수 있다. 
    • 이 secret 문자열은 비밀이므로 .env에 넣는다. COOKIE_SECRET = ... 이런식으로 저장
    • 그 외 옵션: resave(세션을 강제로 저장), saveUninitialized (초기화되지 않은 세션을 저장소에 저장)

app.js

  • inspection > application의 connect.sid가 쿠키!
    • console.log로 req.user를 찍어보면 나온다!
    • 이제 누가 무슨 요청을 하고 있는지 알 수 있다. 
    • 그런데 서버를 껐다가 키면 사용자 정보가 모두 날아간다.
    • session 정보, 쿠키 정보를 메모리에 저장하고 있기 때문.
    • 이것들을 서버에 저장하도록 바꿔야 한다.

 

http://www.passportjs.org/

 

 

 

'Youtube Clone > User Authentication' 카테고리의 다른 글

My profile and User Detail  (0) 2019.09.23
Kakao Login  (0) 2019.09.23
onlyPublic, onlyPrivate  (0) 2019.09.23
MongoStore  (0) 2019.09.23