용기러기's Coding World

Yongki's Do it Django(4) - 로그아웃 기능 구현하기 본문

용기러기's Django

Yongki's Do it Django(4) - 로그아웃 기능 구현하기

yongkis 2020. 4. 13. 00:26

안녕하세요 :)

 

지난 번 챕터에서는 로그인 기능 구현 및 로그인 상태 유지 기능까지 구현해봤는데요.

이번 챕터에서는 그 로그인 상태를 말그대로 아웃하는 로그아웃 기능을 구현해보겠습니다 :)

 

먼저, 간략하게 어떤 방식으로 해줄 것이냐를 말해보면,

django의 친절함으로 인해..

이번에도 로그아웃 시켜주라고만 해주면 될 것 같습니다(?)

 

현재 저의 로그인 이후 유저 페이지인데요. 

옆쪽을 보면, Accout 링크와 Logout링크를 달아두었습니다.

 

Account에 대해서는 이따가 다뤄보도록 하고, 

먼저 저 버튼을 누르면 logout이 되도록 해볼 것인데요.

이렇게 설정을 해두었습니다.

그럼 저 경로를 따라서 도착한 views.logoutPage는 어떻게 되어있는지 살펴보겠습니다.

먼저, logout 을 import 해줍니다 :) 

그 다음에, 

순서대로 설명해보면,

저번 login 쿠키를 담을 때 썼던 방식과 동일하게

response에 index 경로로 가는 redirect를 할당해줍니다(index는 저에게 로그인 하기 이전 페이지, 즉, 로그인 input을 받는 곳 입니다)

그 response에 이전 로그인 기능 때는 set_cookie를 해줬던 것이 기억나시나요 ?

이번엔 그 set_cookie를 => delete_cookie 해주겠습니다.

delete_cookie('쿠키명')

그리고 그 것을 response와 '동봉'하도록 하겠습니다.

그 다음에 너무나도 간단하게 django에게 

로그아웃 시켜줘 [ logout(request) ]라고 말하고

response를 return해줍니다. 

 

이렇게하면 저희가 만들어놨던 로그인 정보를 담는 주머니인 cookie가 delete되고,

logout()으로 인해서 로그인되었던 유저가 로그아웃이 됩니다.

그리고, response에 담아두었던 redirect('index') 경로로 가서 index.html 이 웹브라우저에 나타나게 됩니다 :) 

 

로그인 정보 주머니를 들고다니다가 그 주머니 속 내용물을 지우고, 로그아웃 한 것이라고 보시면 됩니다.

이 때, delete_cookie와 logout을 약간 분리해서 생각해보면,

그냥 logout(request) 만 했을 때, index페이지로 돌아가도, 로그인 정보가 남아있기 때문에 

예를 들어, 저의 경우

index 페이지의 주소명 : http://127.0.0.1:8000/

로그인 후 userpage의 주소명 : http://127.0.0.1:8000/userPage/

일 때, delete_cookie를 안한다면, 로그아웃 된 상태에서 즉, index 페이지로 redirect된 상태에서

주소명 뒤에 /userPage만 해줘도 다시 유저 페이지에 들어가서

d

이 화면이 나오도록 할 수 있습니다.

이걸 실제 상황에 빗대어서 표현해보면, 

학교 컴퓨터로 네이버 웹서핑을 즐기다가 로그아웃하고 

자리를 떴는데(?) 다음 사람이 도메인창 뒤에 /userPage를 쳤을 경우

제 아이디를 그대로 사용할 수 있다는 것이 됩니다. 그래서는 안되겠죠 ?

그래서 logout은 login 상태를 유지하기 이전의 로그인 기능처럼

단지 일시적인 조치이고, 로그인 정보를 담은 주머니는 계속 존재하기 때문에 

직접 없애줘야 합니다

 

그리고 추가적으로!

앞서 말했던 것처럼 로그인 정보를 담은 주머니인 COOKIE는 뒤에서 존재하는 이상 

도메인명만 바꿔줘도 로그인 후 이용할 수 있는 서비스를 문제없이 이용하게 해줍니다.

그렇기 때문에 만약, 클라이언트가 로그인 화면(저에게는 index화면)에 뒤로가기든 뭐든 가게 됐다면(로그인 이전 화면으로)

거기서 강제로 로그아웃을 시키도록 해주면 좋을 것 같습니다:)

이런식으로 index화면에서 만약 쿠키가 None이 아니라면,[ request.COOKIES.get('username') is not None ]

delete_cooke해줘 라고 부탁하는 겁니다. 

이렇게하면 실수로 로그인 이전 화면으로 뒤로가기 눌렀을 때 로그아웃 된다는 불편함(?)이 있을 수 있지만,

아까 학교에서 다음으로 사용하는 사람이 제 정보를 볼 수 도 있다는 것을 방지하는 차원에서는 

큰 도움이 될 것이라고 생각됩니다 :) 

 

자, 여기까지 로그아웃!에 대해서 공부해봤습니다. 

짤막짤막하게 배워서 답답하실 수 있는데, 이 기능 하나하나를 소중히 하자는 의미...(귀찮아서가 아닙니다!) 입니다 :) 

그럼 다음 시간에는 앞서 말씀드린 account부분에서 비밀번호를 바꾸는 설정을 해보도록 하겠습니다.

 

고생하셨습니다 :)