[보안] User관리

이상해씨·2023년 12월 20일
0

장고 (Django)

목록 보기
30/38
post-thumbnail

인증(Authentication)

  • 유저의 로그인을 의미
  • 로그인 시도한 유저가 가입된 유저인지 id, password로 확인하는 과정
  • django에서는 인증을통해 특정 페이지에 대한 권한을 부여할 수 있다.

Django에서의 인증과정


1. 암호화 알고리즘 선택

  • Django에서는 기본적으로 PBKDF2, BCrypt, Argon2 등과 같은 암호화 알고리즘을 제공
  • 사용자의 비밀번호를 해시화하는 데 사용

2. 솔트(Salt)와 반복 횟수(iterations)

  • 비밀번호는 솔트와 함께 암호화, 이는 각각의 사용자에게 고유하게 적용
  • 반복 횟수(iterations)는 비밀번호를 해싱하기 위해 알고리즘을 반복하는 횟수를 의미. 높은 반복 횟수는 보안성을 높이는 데 도움.

3. 비밀번호 해시화

  • 사용자가 비밀번호를 입력하면, 이 비밀번호는 선택된 알고리즘을 사용하여 해시화
  • 이 과정에서 솔트와 반복 횟수가 적용
  • 해시화된 비밀번호는 데이터베이스에 저장

4. 인증 및 비밀번호 확인

  • 사용자가 로그인을 시도하면, 입력된 비밀번호는 동일한 과정을 거쳐 해시화
  • 해시화된 비밀번호와 데이터베이스에 저장된 해시값과 비교하여 만약 일치한다면, 사용자는 인증 성공!

Django 제공 인증 기능

User 모델

  • settings.py에서 INSTALLED_APPS django 인증 APP django.contrib.auth
  • User 모델이 작성되어 있는 app으로, 따로 유저 인증을 구현할 필요없음
  • id, username, first_name, last_name, email, date_joined, password, last_join이 정의되어 있음
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth', # 장고 기본 인증
    ...
]

회원가입

1. views.py 설정

  • Built-in class-based viewCreateView를 통해 쉽게 구현가능
  • 앱/views.py
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm
from django.views.generic.edit import CreateView

class SignupView(CreateView):
    template_name = 'signup.html'
    form_class = UserCreationForm
    model = get_user_model()

    def get_success_url(self):
        return '/<app이름>/login/'
  • template_name : 로그인 페이지로 사용할 html 템플릿
  • form_class : 폼으로 사용할 클래스. 여기서는 django의 auth앱에 미리 구현된 UserCreationForm을 사용합니다.
  • model : 해당 CreationView로 생성할 모델
  • get_success_url() : 생성 성공하면 어느 URL로 이동할 것이지 설정

2. templates 생성 및 설정

로그인

1. settings.py 설정
: settings.py에 LOGIN_REDIRECT_URL 설정. 설정하지 않을 시 기본 값은 /accounts/profile/

LOGIN_REDIRECT_URL = '/dd/'

2. auth 앱의 LoginView 사용

from django.contrib.auth.views import LoginView as _LoginView

class LoginView(_LoginView):
    template_name = "login.html"

3. templates 생성 및 설정

로그아웃

  • auth 앱에 LogoutView가 구현
    1. views.py 생성
class LogoutView(_LogoutView):
    template_name = "logout.html"

2. templates 생성 및 설정

로그인 사용자 권한

Django 인증 시스템 사용하기(Django)

  • 로그인 사용자의 페이지 접근 권한 제어
from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    ...

Django allauth

  • 쉽게 인증 페이지를 구현하도록 코드를 제공하는 사이트
  • 구글 로그인 등 소셜 로그인을 쉽게 구현할 수 있음
    (https://docs.allauth.org/en/latest/)


참고

profile
공부에는 끝이 없다

0개의 댓글