데이터 분석가

교재홍보

이전 내용 확인

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) 웹페이지에서 로그인 실행

  • 새롭게 회원가입을 진행해 준다.

  • 로그인을 해준다.

  • 성공적으로 로그인이 될 경우 세션이 유지된채로 메인페이지로 리디렉션 됨을 볼 수 있다.

profile

데이터 분석가

@이꾹꾹

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!