꾸준한프로그래밍

[개발 노트 1일차] passport.js 이용 로그인, 로그아웃 구현 본문

개발 오답노트

[개발 노트 1일차] passport.js 이용 로그인, 로그아웃 구현

꾸준이 2021. 9. 14. 19:34

[오늘 해낸 것]

-깃 계정 새로 파서 연동 다시하기

- sessions 스키마에 저장된 값을 적재적소에 사용하기(sessions의 값 불러오기)

- 로그아웃 하기

- 원래는 jwt를 통해 토큰화 되어있고, 그걸로 auth를 관리했었는데 이를 passport에 관한걸로 바꾸기

- console.log 로 디버깅 하기

- users.save(mongoose 오류) 해결.(처음에만 save, 그다음에는 findOneAndUpdate를 쓰자

 

 

[어려운 것]

- 깃 계정 연동할때 기존 계정과의 충돌이 일어난 것

- sessions에 저장된 데이터를 어떻게 불러올지 몰랐던것

- 로그아웃 원리를 몰랐던 것

- passport 자체가 이해가 안갔던 것

- userSchema에서 원래는 _id 값을 줬었는데 에러가 떴었다. 지우니 해결(그렇다고 _id값이 안만들어진건 아니였다)

 

 

 

본격적으로 기록을 해보려고 한다. 그래서 큰마음 먹고 깃 계정도 새로 팠는데 자꾸 vscode상에서 에러가 떴다. git 어쩌구 permission denied to whdgus380(예전 계정) 하면서..

 

처음 방법은 

git remote -v 명령어를 통해 원격 저장소를 찾아내고 git rm 으로 지우는 것이다. 한 세네번 해봤는데 되지 않자 다른방법을 쓰게 되었다. 그것은 바로 맥용 응용프로그램 '키체인 접근'에 들어가 검색에 git 을 검색하고 git 이 들어간 모든 폴더를 지우는 거였다. 결과는 성공적!!!!

한 한시간 헤매서 그런지 진이 좀 빠진다...

 

 

그리고 드디어 login과 logout을 passport를 통해 해냈다.

 passport.serializeUser 을 통해 값을 저장했을때 나는 users라는 schema에 들어가게 하고 싶었는데 계속 sessions가 따로 만들어졌다. 이를 어떻게 연동할지를 몰라 계속 검색했었는데, sessions라는 스키마에 값이 저장이 되는 순간 req._passport에 저장이 되더라.. 그리고 req.logout을 하면 req._passport에서 세션 값이 사라진다. 환호했다!!!!

 

그래서 if(!req._passport.session) 로 원래는 로그아웃된건지 아닌지 판별하려고 했지만 {} 라는 빈 객체가 있어서 그런지 판별이 되지 않았다. 그래서 length를 쓰는 방법으로 결국 구현해 냈다.

 

위는 passport.use 사용하는 방법이다. passport 공식 문서에는 에러처리가 다 done(null,false,{message : 어쩌구} 형태로 되어있었는데 먹통이였다. 그래서 console.log로 다 바꿔줬는데 디버깅이 훨씬 쉬웠다.

 

 

주말까지 소셜로그인까지 구현하려면 정말 바쁘게 살아야겠다. 그래도 오랜 시간 passport로 고민한 덕에 몇발자국 앞으로 나아간거 같긴 하다