티스토리 뷰

study/Django

authenticate() 함수

xoxowo 2023. 5. 29. 22:30

유저 앱의 기능을 Django에서 제공하는 인증 시스템을 사용해 보려고 이것저것 시도해 보면서 알게 된? 부분을 개인적으로 정리해 보았다. (chatGPT 참고 👍)

 

부끄럽지만 ^^.. 작성한 코드를 살펴보면 'POST'요청에서 사용자로부터 ID로 사용되는 email값과 password값을 입력받는데, Django에서 제공하는 authenticate() 함수와 login() 함수를 사용하여 사용자 인증과 사용자 ID를 세션에 저장하려고 했다.

 

authenticate() 함수가 실행되면 받아온 매개변수 값(아래 코드에서는 email값과 password값)이 유효하지 않는다면 None 값을 반환한다.

 

→ 폴더명\hyj\users\views.py

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

    elif request.method == 'POST':
        email    = request.POST['email']
        password = request.POST['password']
        errorMsg = {}
        # authenticate() 유효하지 않는다면 None 값을 반환한다
        user = authenticate(request, email=email, password=password)
        
        if user is not None:
            login(request,user=user)
            return redirect('/board', status=200)

        else:
            errorMsg['error'] = "ID 혹은 비밀번호 오류입니다."
            return render(request, 'users/login.html', errorMsg)

 

❓ 그러나 정상적으로 회원 로그인이 되지 않아 user 를 출력해봤더니 회원, 비회원 상관없이 None 값을 반환했다. 

 

authenticate( 요청 = 없음 , ** 자격 증명 )

'기본적으로 authenticate() 함수는 사용자 식별을 위해 usernamepassword 매개변수를 사용합니다. 따라서 UserManager 클래스를 사용하지 않고 커스텀 사용자 모델을 정의할 경우, authenticate() 함수에는 username 매개변수를 사용해야 합니다.'

django 공식 문서

 

authenticate() 함수는 username과 password 값만 유효한 값으로 받아들이기 때문에 내가 이용하고자하는 email은 커스텀 user 모델을 정의해야한다고한다.

 

→  공식 문서 예시

from django.contrib.auth import authenticate, login


def my_view(request):
    username = request.POST["username"]
    password = request.POST["password"]
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        # Redirect to a success page.
        ...
    else:
        # Return an 'invalid login'

 

 

현재 문제는 알았으니 코드를 수정해서 실행해봐도 계속 None 값을 반환해서 어디서 부터 잘못된건지 다시 살펴보고있는중 ㅠㅜ 진도가 안나가는 

'study > Django' 카테고리의 다른 글

한글 형태소 분석기 Okt  (0) 2023.07.03
django.contrib.auth  (0) 2023.06.15
Template - 검색 결과 내 페이지네이션  (0) 2023.05.22
Template 기본 구조  (0) 2023.05.11
Django - AWS S3 파일 업로드  (0) 2023.04.14
댓글