Django : Authentication 2

김재훈·2024년 4월 1일

Django

목록 보기
10/15

회원 가입

  • User 객체를 Create 하는 과정

UserCreationForm()

  • 회원 가입시 사용자 입력 데이터를 받는 built-in ModelForm
def signup(request):
	if request.method =="POST":
    form = UserCreationForm(request.POST)
    if form.is_valid():
    	form.save()
        return redirect('articles:index')
    else:
    	form = UserCreationForm()
    Context = {
    	'form': form,
    }
    return render(request, 'accounts/signup.html', context)

회원가입 로직 에러

get_user_model()

  • 현재 프로젝트에서 활성화된 사용자 모델(active user model)을 반환하는 함수

User 모델을 직접 참조하지 않는 이유

  • get_user_model()을 사용해 User 모델을 참조하면 커스텀 User 모델을 자동으로 반환해주기 때문
  • Django는 필수적으로 User 클래스를 직접 참조하는 대신 get_user_model()을 사용해 참조해야 한다고 강조하고 있음

    User model 참조에 대한 자세한 내용은 추후 모델 관계에서 다룰 예정

# accounts/views.py

from .forms import CustomUserCreationForm

def signup(request):
	if request.method == "POST":
    	form = CustomUserCreationForm(request.POST)
        if form.is_valid():
        	form.save()
            return redirect('articles:index')
    else:
    	form = CustomUserCreationForm()
    context = {
    	'form': form,
    }
    return render(request, 'accounts/signup.html', context)

회원 탈퇴

  • User 객체를 Delete하는 과정

회원 정보 수정

  • User 객체를 Update하는 과정

UserChangeForm()

  • 회원정보 수정 시 사용자 입력 데이터를 받는 built-in ModelForm
  • UserChangeForm 사용시 문제점
    • User 모델의 모든 정보들(fields)까지 모두 출력되어 수정이 가능하기 때문에 일반 사용자들이 접근해서는 안되는 정보는 출력하지 않도록 해야 함

CustomUserChangeForm에서 접근 가능한 필드를 다시 조정


비밀번호 변경

PasswordChangeForm()

  • 비밀번호 변경시 사용자 입력 데이터를 받는 built-in form

세션 무효화 방지

  • 비밀번호가 변경되면 기존 세션과의 회원 인증 정보가 일치하지 않게 되어버려 로그인 상태가 유지되지 못하고 로그아웃 처리됨
  • 비밀번호가 변경되면서 기존 세션과의 회원 인증 정보가 일치하지 않기 때문

update_session_auth_hash(request, user)

  • 암호 변경시 세션 무효화를 막아주는 함수

    암호가 변경되면 새로운 password의 Session Date로 기존 session을 자동으로 갱신


인증된 사용자에 대한 접근 제한

  1. is_authenticated 속성 (attribute)
    • 사용자가 인증되었는지 여부를 알 수 있는 User model의 속성

      모든 User 인스턴스에 대해 항상 True인 읽기 전용 속성이며, 비인증 사용자에 대해서는 항상 False

    • 인증된 사용자라면 로그인/회원가입 로직을 수행할 수 없도록 하기
  2. login_required 데코레이터 (decorator)
    • 인증된 사용자에 대해서만 view 함수를 실행시키는 데코레이터

      비인증 사용자의 경우 /accounts/login/ 주소로 redirect 시킴

    • 인증된 사용자만 게시글을 작성/수정/삭제할 수 있도록 수정

0개의 댓글