쿠키안에는 token 을 저장한다. (토큰의 종류에는 access_token, refresh_token 2개가 있다)
token 이 만료되면 ( token의 필드 중 이름 기억안나는 어떤 필드가 0이 되면) 쿠키가 삭제된다.
=> delete_cookie() 메스도로 쿠키 안에있는 token 의 값을 0으로 만들 수 있다.
HTTP 통신에 대해 지난번에 알아봤다. 이 정보는 상태 비 저장 프로토콜 이다.
우리가 로그인을 할때 아디이와 비밀번호의 정보고 HTTP 통신 중 POST 방식으로 보내기 때문에 이 정보는 저장이 되지 않는다.
그렇기 때문에 로그인 유지하기 기능을 구현하기 위해선, 다른 방법을 사용해야 한다.
그 방법으로 쿠키 와 세션 을 이용한다.
쿠키란?
만료시점
쿠키 구성요소
용량제한
쿠키 동작방식
예시
세션의 단점
세션의 동작 방식
로그인과 같이 보안상 중요한 작업
쿠키와 세션에 대해 알아봤다. 이제 쿠키를 통해 로그인 유지 기능을 구현해보자.
쿠키 만들기
set_cookie(name, value, max_age = None)
request.COOKIE[name]
쿠키는 딕셔너리와 같은 속성을 지이고 있다. 몰론 딕셔너리는 아니고 object (객체)이다. 쿠키 데이터를 읽으면 수가 아닌 문자열로 반환한다.
def login(request):
# 해당 쿠키에 값이 없을 경우 None 을 리턴한다.
if request.COOKIES.get('username') is not None:
username = request.COOKIES.get('username')
password = request.COOKIES.get('password')
user = auth.authenticate(request, usernme = username, password = password)
if user is not None:
auth.login(request, user)
return redirect("account:hone")
elif request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(request, username = username, password = password)
if user is not None:
auth.login(request, user)
if request.POST.get('keep_login') == 'TRUE':
response.set_cookie('username', username)
response.set_cookie('password', password)
return response
return redirect("account:home")
else:
return render(request, 'account/login.html', {'error' : 'username or password is not incorrect'})
else:
return render(request, 'account/login.html')
return render(request, 'account/login.html')
로그아웃시에는 저장한 쿠키를 없애주도록 구현했다.
def logout(request):
response = render(request, 'account/home.html')
response.delete_cookie('username')
response.delete_cookie('password')
auth.logout(request)
return response