- Passport는 사용자 인증을 구현하는데 사용하는 미들웨어
- Passport는 쿠키를 생성하고, 브라우저에 저장하고, 유저에게 전용 쿠키를 준다.
- 쿠키에는 백엔드로 전송될 정보들이 담겨있다.
- 서버에 뭔가 요청할 때마다(로그인, 프로필 편집 등등) 브라우저가 쿠키들을 서버로 전송한다.
- Passport가 자동으로 쿠키를 가져와서 인증이 완료된 User object를 controller에 넘겨준다.
- npm i passport passport-local
- User 모델: 이름, 이메일, 페이스북, 아바타 URL 등 사용자의 정보를 담고 있다.
- 이름과 이메일을 입력하면 계정을 생성하고, 이를 등록한다.
- 가입시킨 뒤에 자동으로 로그인시킨다. globalRouter.post(routes.join, postJoin, postLogin);
- strategy는 사용자 인증 방식
- 아이디와 비밀번호를 이용하거나, 페이스북 아이디, 카카오톡 아이디를 이용하는 등
- passport-local은 해당 사이트의 아이디와 비밀번호를 이용하는 사용자 인증 방식
- passport는 serializeUser와 deserializeUser 기능을 가지고 있다.
- serialization은 쿠키에게 어떤 정보를 줄 것인가?
- deserialization은 어느 사용자인지 어떻게 찾는가?
- 이 과정들은 passport-local-mongoose가 대신 해준다!
- npm install passport-local-mongoose
- 일반적으로 쿠키에 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 (초기화되지 않은 세션을 저장소에 저장)
- inspection > application의 connect.sid가 쿠키!
- console.log로 req.user를 찍어보면 나온다!
- 이제 누가 무슨 요청을 하고 있는지 알 수 있다.
- 그런데 서버를 껐다가 키면 사용자 정보가 모두 날아간다.
- session 정보, 쿠키 정보를 메모리에 저장하고 있기 때문.
- 이것들을 서버에 저장하도록 바꿔야 한다.
'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 |