용기러기's Coding World

Yongki's Do it Django(3) - 로그인 상태 유지하기 본문

용기러기's Django

Yongki's Do it Django(3) - 로그인 상태 유지하기

yongkis 2020. 4. 12. 23:23

안녕하세요 :)

 

오늘은 저번 챕터에서 말씀드린 대로

로그인을 한 뒤에 그 로그인 상태

쉽게 말해보면, 로그인 정보를 어떤 '주머니(Cookies)'에 넣고 계속해서 들고 다니면서

나 이미 로그인 한 사람(?)이라는 것을 알려주면서 웹 페이지를 돌아다니는 겁니다.

 

그러면 먼저, 로그인을 해보겠습니다.

로그인 화면

현재 저는 로그인을 하면 

이런 식으로 해당 유저 객체의 first_name과 last_name 인수를 받아서 풀네임을 보여주도록 했습니다. 

 

하지만, 이 현재 상태는 새로고침을 하거나, 현재 페이지에서 다른 페이지로 a태그를 통해서 넘어가면 

로그인한 유저 객체의 정보를 까먹는(?) 상황이라고 할 수 있습니다.

 

"""

이 부분에 대해서 간략하게 설명을 드리면, 

저희가 웹서핑을 할 때는 그 흐름이 너무 자연스러워서

계속 웹서버가 저희 클라이언트들을 책임지고 가이드(?)해주고 있다고 생각합니다.

즉, 저희는 한번 웹서버(예를 들어, 네이버, 구글과 같은)에 접속하면 그들의 보호하에 끊기지 않고

자연스럽게 계속 네이버의 웹페이지를 서핑할 수 있다고 생각합니다.

 

그러나, 현실 속 웹서버는 저희(클라이언트)가 원하는 웹페이지를 보여주고 '수고!'하고 사라지는 것과 같이 행동합니다.

즉, 저희가 나 이런 페이지 보여줘!(request) => 아 그거? 잠깐만... 여깄다(response) => 저희들의 모니터 속 웹브라우저에 웹페이지를 보여주고, away from the here(?) 한다는 것입니다(웹 페이지를 보여주고, 가이드처럼 계속 저희를 지켜보는 조력자라고 생각했는데 말이죠!) 

 

그렇기 때문에 우리는 로그인을 했어도 다른 웹페이지로 넘어가거나 혹은 새로고침만 해도, 즉, 그 상태를 벗어나기만 해도 

모든 것이 초기화되는 상황이 됩니다(로그인 정보를 잃게 됩니다) 

따라서, 우리는 앞서 말했듯이 어떤 주머니에 로그인 정보를 계속해서 들고 다니면서 일종의 마패(?)처럼

다른 페이지에 갈 때마다 나 로그인한 사람이야~라는 것을 보여줄 필요가 있습니다

(그래야 우리가 편하겠죠? 매번 검문을 안 받아도 되니까요!) 

"""

 

자, 그러면 조금 비유적인 설명이 만족스러우셨을지는 모르겠지만,

실제로 그럼 저희들이 쓸만한 정보를 담을 주머니를 만들어보겠습니다!

 

그전에 저번에 만든 views.py에 로그인 부분을 보면,

이러한데요. 

여기서 수정을 해서 만들어보겠습니다.

 

여기서 포인트는 아까 말한 '로그인 정보를 담는 주머니 생성' 입니다.

그러면 어떤 포인트에 그 주머니를 만들어야 할까요 ??

바로 로그인 직후가 되겠죠 ?? :) 

(**저 'keep_login' 부분은 앞 챕터에서도 말씀드렸다시피 저만의(?) 설정이기도 해서요

저는 저 keep_login을 디폴트로 True로 해놨지만, 특정 유저에 대해서는 false설정을 해보려고 저렇게 한 것이니 

다르게 하셔도 됩니다.)

 

자 그러면, 로그인을 한 뒤에 response라는 변수에 redirect 혹은 자기가 원하는 곳으로 가는

response 설정(HttpResponse, render 등등 다 괜찮습니다)을 해줍니다.

그 뒤에 그 response에 주머니를 만들어서 같이 보내봅시다.

바로 set_cookie()를 이용해서 말이죠.

**set_cookie('쿠키명':넣을 인수) 형태로 사용합니다

그럼, 로그인 정보를 담는 주머니는 이  COOKIE 였다는 것을 알게됐고,

저희는 이제 이 쿠키 주머니에 로그인 정보를 담아서 response에 함께 보내주도록 하겠습니다(=return response)

 

아까와 똑같은 userPage화면이지만, 이제 새로고침해도 로그인 정보가 없어지지 않습니다! 

이 때 이 화면(user.html)과 연관된 

views.userPage 를 보여드리면

이러 합니다.

저는 COOKIES에 담겨져 있는 'username'이라는 쿠키명을 가진 인수를 받아서 [request.COOKIES.get() 부분]

즉, 로그인 정보를 담는 주머니에서 username부분(아이디)을 꺼내와서 그 아이디에 해당하는 

User모델의 객체를 가져왔습니다.[User.objects.get() 부분]

 

그런 다음, 그 객체를 pageContext에 dictionary형태로 담아 user.html로 보내줬습니다.

그래서 저 위에 '홍용기님 반갑습니다' 이부분이

이러한 소스코드에 의해서(in user.html) 나타나게 된 겁니다. 

만약 COOKIE 에 로그인 정보를 넣지 않았더라면, 즉, COOKIE가 없었더라면,

로그인 직후에 새로고침 혹은 다른 웹페이지로 링크를 타고 간 뒤에 뒤로가기를 하더라도 

저 화면이 나오지 않고, Error가 떴을 것 입니다. 

 

여기까지 저희는 로그인 기능에 더해서 로그인 상태를 COOKIE라는 로그인 정보를 담는 주머니를 통해서

유지하는 기능을 구현해봤습니다.

다음 챕터에서는 이러한 로그인 상태에서 나가는..ㅎㅎ 

이름하여 로그아웃!(짜잔~ㅎㅎ 죄송합니다;)에 대해서 배워보도록 하겠습니다:) 

 

고생하셨습니다 :)