2010년 6월 7일 월요일

07. 사용자 인증 - User Data Model

django 사용자 인증 시스템을 내장하여 사용자의 계정, 그룹, 권한과 쿠키 기반의 사용자 세션을 다룹니다.

즉, 사용자의 로그인서부터 사이트를 이용하는 동안의 전과정을 다룰 수 있는 시스템을 내장하고 있습니다.

django의 사용자 인증 시스템을 사용하기 위해서는 settings.py의 INSTALLED_APPS 에 'django.contrib.auth' 가 등록되어 있어야 하며 현재 django 버전에서는 기본적으로 설정되어 있습니다.

 

사용자 인증 시스템은 운영을 위한 별도의 자료 구조를 갖고 있습니다. (django/contrib/auth/models.py)

그중 사용자 정보( class User(models.Model) ) 를 models.py에서 다음과 같이 import 해서 웹 사이트에서 사용할 수 있습니다.

 

  1. models.py
  2. ...
  3. from django.contrib.auth.models import User
  4. ...

 

사용자 인증 시스템에 의해 저장되는 사용자 정보(User model)는 다음과 같습니다.

username : 문자열(최대 30자), Unique 값 (필수값)

first_name : 문자열(최대 30자), 성을 저장

last_name : 문자열(최대 30자), 이름을 저장
email : EmailField,  이메일 저장 필드
password : 문자열(최대 128자), 암호 저장 (필수값)
is_staff : Boolean, 관리자 Group여부, 기본값은 False (필수값)
is_active : Boolean, 사용자의 현재 상태로 정지상태면 False, 기본값은 True (필수값)

is_superuser : Boolean, 관리자 여부로 기본값은 False (필수값)

last_login : DateTime, 마지막 로그인 시간 (필수값)
date_joined : DateTime, 처음 등록된 시간 (필수값)

groups : ManyToManyField, 사용자의 시스템 내장 Group

user_permissions : ManyToManyField, 사용자의 시스템 내장 권한

 

위의 기본정보를 이용하여 사용자 정보를 저장하기 위해 별도의 Table없이 사용자 정보를 저장하고 관리하는 것으로 간단하게 사용자를 추가하여 보도록 하겠습니다.

 

  1. c:> python manage.py shell
  2. >>> from django.contrib.auth.models import User
    >>> User.objects.all()
    [<User: 처음 Models 수립시 작성한 관리자 ID>]
    >>> user1 = User.objects.create_user('test1', 'test@abc.com', 'pasword123')
  3. >>> user1.is_staff = False
    >>> User.objects.all()
    [<User: yoonani>, <User: test1>]
    >>> user1.save()

 

사용자 추가시 고려해야 할 부분은 암호부분입니다. 위의 User  model에서 보면 암호 부분이 128자 인 것을 볼 수 있습니다.

이때 저장되는 사용자의 암호는 일반 평문이 아니라 별도의 암호 알고리즘을 이용하여 암호를 저장합니다.

django에서는 SHA1 이라는 암호화 알고리즘을 이용하여 암호를 생성하고 비교합니다. 따라서 저장시 그냥 평문을 쓰는 것이 아니라 암호로 지정한 문자열을 암호화하여 저장합니다.(관리자라고 하더라도 원래의 평문 암호는 모릅니다.)

별도의 암호화 함수를 사용할 수도 있지만 django 사용자 인증 시스템에서 제공하는 create_user()를 사용하면 쉽게 사용자를 추가할 수 있습니다.

create_user() 메소드는 django의 사용자 인증 시스템에서 제공하는 UserManeger object의 메소드로 순서대로 사용자명, 이메일, 암호를 입력받아 이를 저장하기위한 결과(사용자 객체)를 만들어 냅니다. 내부적으로는 set_password()라는 함수를 사용합니다.

 

>>> user1.password
'sha1$a4d94$ca17fd9fe7c60e31bba78ce20436b4116e1a46d5'

 

 

이제 간략히 사용자 정보를 저장하는 방법에 대해 알아보았으니 로그인 과정에 대해 알아보도록 합시다.

 

사용자 인증 시스템에 대한 좀 더 자세한 안내는 http://docs.djangoproject.com/en/1.1/topics/auth/#topics-auth 을 방문해서 살펴보시기 바랍니다.

이 글은 스프링노트에서 작성되었습니다.

댓글 없음:

댓글 쓰기