교재홍보
- 다음의 교재를 바탕으로 실습이 이루어질 예정이다.
- 교재 구매 : https://www.yes24.com/Product/Goods/83568594
이전 내용 확인
이 글이 처음이라면 이전 블로그를 참조하길 바랍니다.
- 첫번째 글 : https://ls-alt.tistory.com/13
- 두번째 글 : https://ls-alt.tistory.com/14
- 세번째 글 : https://ls-alt.tistory.com/15
4. 세션을 통한 로그인
- 이번 시간에는 웹에서 세션을 활용한 로그인을 구현해보겠습니다.
1) 쿠키 대신 세션 설정
세번째 글 말미에 설정했던 verify함수를 수정해줍니다.
수정 전
if user_code == cookie_code: . . . response.set_cookie('user', user) # user 객체를 response에 'user'라는 이름의 쿠키에 생성한다. 이 쿠키는 추후 인증이 필요한 경우 사용된다. return response # 메인페이지로 리디렉션한다. else: print("False") return redirect('main_index') # 메인페이지로 리디렉션한다.
수정 후
if user_code == cookie_code: . . . request.session['user_name'] = user.user_name request.session['user_email'] = user.user_email # user의 name과 email값을 세션에 할당한다. return response # 메인페이지로 리디렉션한다. else: print("False") return redirect('main_index') # 메인페이지로 리디렉션한다.
2) 로그인 버튼 클릭 구현
웹에서 로그인 버튼 클릭 시 세션이 유지되는 로그인이 되도록 설정한다.
main > templates > main > signin.html 수정
수정 전
<form action="" method="POST">{% csrf_token %}
수정 후
<form action="signin/login" method="POST">{% csrf_token %} # action 속성을 signin/login으로 설정하여 urls.py의 정해진 경로로 가게된다.
main > urls.py에 경로추가
path('signin/login', views.login, name="main_login")
main > views.py에서 login 함수 생성
def login(request):
# 로그인된 사용자만 이용할 수 있도록 구현
# 이 때, 현재 사용자가 로그인된 사용자인지 판단하기 위해 세션 사용(verify에서 만든 세션)
# 세션 처리 진행
loginEmail = request.POST['loginEmail']
loginPW = request.POST['loginPW']
# 사용자 요청으로부터 email과 pw를 가져와 변수에 할당한다.
user = User.objects.get(user_email=loginEmail)
# User 모델에서 입력한 이메일(loginEmail)과 같은 이메일을 가진 유저 데이터를 가져와 user에 할당한다.
if user.user_password == loginPW:
# 모델에서 가져온 pw와 입력한 패스워드(loginPW)가 서로 같다면 실행
request.session['user_name'] = user.user_name
request.session['user_email'] = user.user_email
# 해당 유저의 이름과 이메일을 세션에 저장하여 로그인한 상태로 처리한다.
return redirect('main_index')
# 메인 인덱스로 리디렉션 시킨다.
else:
# 로그인 실패, 정보가 다름
return redirect("main_loginFail")
# loginFail로 리디렉션 시킨다.
main > views.py에서 index 함수 수정
수정 전
def index(request): return render(request, 'main/index.html')
수정 후
def index(request): if 'user_name' in request.session.keys(): # 정상적으로 login 함수를 거쳤다면 request.session['user_name']을 통해 # 'user_name'이 session에 존재할 것이므로 조건문 실행 return render(request, 'main/index.html') # 사용자의 세션 정보가 담겨져 있는 상태의 index.html을 화면에 표시 else: return redirect('main_signin') # login 되지 않은 상태이기 때문에 다시 로그인 화면으로 리디렉션 # return render(request, 'main/index.html') # 세션 정보가 없는 index.html
3) 웹페이지에서 로그인 실행
새롭게 회원가입을 진행해 준다.
로그인을 해준다.
성공적으로 로그인이 될 경우 세션이 유지된채로 메인페이지로 리디렉션 됨을 볼 수 있다.
'Django' 카테고리의 다른 글
Django - 엑셀계산 사이트 만들기(6) (0) | 2023.08.03 |
---|---|
Django - 엑셀계산 사이트 만들기(5) (0) | 2023.08.03 |
Django - 엑셀계산 사이트 만들기(3) (0) | 2023.08.01 |
Django - 엑셀계산 사이트 만들기(2) (0) | 2023.07.31 |
Django - 엑셀계산 사이트 만들기(1) (0) | 2023.07.31 |