Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

MyPrograming

(계속) Django Authentication 기능을 통한 로그인 / 인증 / 로그아웃 본문

Python/python 클론코딩

(계속) Django Authentication 기능을 통한 로그인 / 인증 / 로그아웃

SeongWon 2020. 4. 2. 22:46
반응형

1. 로그인

 

login.html

<form class="mt-3" method="post" action='{% url "accounts:login" %}'>{% csrf_token %}
    <div class="form-group">
      <input type="text" class="form-control" id="user_id" name="user_id" placeholder="사용자 이름">
    </div>
    <div class="form-group">
      <input type="password" class="form-control" id="user_pw" name="user_pw" placeholder="비밀번호">
    </div>
    <button type="submit" class="btn btn-primary" onclick="">로그인</button>
</form>

 

loginView.py

from django.contrib.auth import authenticate, login

def new_LoginView(request):
    if request.method == "GET":
        return render(request, 'login.html')

    elif request.method == "POST":
        user_id= request.POST.get('user_id')
        user_pw= request.POST.get('user_pw')

        user = authenticate(request, username=user_id, password=user_pw)

        if user is not None:
            login(request,user=user)
            return redirect('instagram:main')

        else:
            messages.error(request,'ID 혹은 비밀번호 오류입니다.')
            return redirect('accounts:login')
  • authenticate(request=None, **credentials)

    : User 인증 함수. 자격 증명이 유효한 경우 User 객체를, 그렇지 않은 경우 None을 반환

  • login(request, user, backend=None)

    : 로그인 함수. Django의 세션 프레임 워크를 사용하여 세션에 인증된 사용자의 ID를 저장


 

2. 로그인 인증

# settings.py
...
LOGIN_URL = '/login/'
...

로그인 상태를 필수로 요구하는 페이지나 기능에 접근하려 할 때, 현재 사용자가 인증된 사용자인지 확인해야 한다.

위는 사용자가 인증에 실패할 시, 리다이렉트 할 기본 경로를 지정해준 것이다.

 

 

2.1 View에서의 인증확인

if request.user.is_authenticated:
        # 로그인한 유저인 경우
        ...
    else:
        # 로그인 하지 않은 유저인 경우
        ...
        return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
  • is_authenticated : 대상 User 객체의 로그인 여부를 확인
  • '%s?next=%s' : 기본적으로 인증 성공시 사용자를 리다이렉트하는 경로는 "next"라는 쿼리 문자열 매개 변수에  저장

 

@login_required
def example(request):
    if ........
  • login_required() 데코레이터를 사용하면 로그인하지 않은 유저에 대한 처리를 위의 방법보다 더 간단하게 구현할 수 있다.

 

2.2 Templates에서의 인증확인

...
{% if user.is_authenticated %}
    <a href="{% url 'login:signout' %}">로그아웃</a>
{% else %}
    <a href="{% url 'login:signin' %}">로그인</a>
{% endif %}
...
 

 


 

3. 로그아웃

 

def Logout(request):
    logout(request)
    return redirect('accounts:login')
  • 현재 로그인된 세션에 대한 모든 데이터를 삭제
반응형