반응형
[Django] 사용자 인증 (2)
Using the Django authentication system
이 문서는 Django의 인증 시스템을 기본 구성에서 사용하는 방법을 설명한다. 이 구성은 가장 일반적인 프로젝트 요구에 부응하고, 상당히 광범위한 작업을 처리하며, 암호 및 권한을 신중하게 구현하도록 진화했다. 인증 요구 사항이 기본값과 다른 프로젝트의 경우, Django는 광범위한 확장 및 사용자 정의(extension and customization)의 인증을 지원한다.
Django 인증은 인증 및 승인을 함께 제공하며 일반적으로 이러한 기능이 다소 결합되어 있기 때문에 인증 시스템이라고한다.
User Objects
User Objects는 인증시스템의 핵심이다. 사이트와 상호작용하는 사람들을 대표하며, 액세스 제한, 사용자 프로필 등록, 콘텐츠를 제작자와 연동 등의 작업을 수행하는데 사용된다. Django의 인증 프레임워크에는 하나의 사용자 클래스만 존재한다. “Superusers” 또는 admin “staff”사용자는 특수 속성이 설정된 사용자 객체이다.
기본 사용자의 주요 속성은:
- username
- password
- email
- first_name
- last_name
Creating Users 계정 생성
사용자를 만드는 가장 직접적인 방법은 포함된 create_user() 헬퍼 함수를 이용하는 것이다.
from django.contrib.auth.models import User. # User 객체 추가 user = User.objects.create_user(’park', ‘park@naver.com', ‘park@@‘) user.save()
Creating superusers 슈퍼유저 생성
createsuperuser 명령어를 이용하여 슈퍼유저 생성:
>>> $ python manage.py createsuperuser --username=joe --email=joe@example.com
암호를 물어 보는 메세지가 보이고 암호를 입력하면, 즉시 사용자가 생성된다. -username 또는 —email 옵션을 사용하지 않으면, 해당 값을 묻는 메세지가 표시된다.
Changing passwords 패스워드 변경
그렇기 때문에, 사용자 암호 속성을 직접 조작하지 마라. 이러한 이유 때문에 계정을 생성할 때 헬퍼 함수가 사용된다.
사용자의 암호를 변경 하려면 다음과 같은 몇 가지 옵션이 있다.
- manage.py changepassword *username*
- command line에서 사용자의 패스워드를 변경.
- 사용자의 비밀번호를 변경하라는 프롬프트(prompts)가 표시되며, 두 번 입력해야 한다.
- 입력받은 두 암호가 일치하면 즉시 변경된다.
- 사용자를 입력하지 않으면, 이 명령은 username이 현재 시스템 유저와 일치하는 사용자의 암호를 변경하려고 시도한다.
- set_password()
-프로그래밍 방식으로 암호 변경.
from django.contrib.auth.models import User u = User.objects.get(username='john') u.set_password('new password') u.save()
Django는 또한 views와 forms를 제공하며, 이들은 사용자가 자신의 암호를 변경할 수 있도록 허락 할 수 있다.
사용자 암호를 변경하면 모든 세션이 로그아웃 된다. 자세한 내용은 패스워드 변경시 세션 무효화(Session invalidation on password change) 문서를 확인해라.
Authenticating users 사용자 인증
authenticate()를 이용하여 자격 증명 집합을 확인한다. 기본 사례의 키워드 인수, username과 password로 자격 증명을 가져와서, 각 인증 백엔드(authentication backend)에 대해 확인하고 자격 증명이 백엔드에 유효한 경우 User 객체를 반환한다. 만약 자격 증명이 백엔드에 유효하지 않거나 백엔드가 PermissionDenied를 발생시키면 None을 반환한다. 예를 들어:
from django.contrib.auth import authenticateuser =authenticate(username='john',password='secret') ifuser is not None: # A backend authenticated the credentials else: # No backend authenticated the credentials
요청(request)은 인증 백엔드의 authenticate() 메소드에 전달되는 선택적 HttpRequest이다.
[참고] Django docs
반응형
'Python > Django' 카테고리의 다른 글
[Django] target wsgi script wsgi.py cannot be loaded as python module 에러 해결 방법 (0) | 2019.01.29 |
---|---|
[Django] 사용자 인증 시스템 (0) | 2019.01.23 |
[Django] 데이터베이스에 초기(initial) 데이터 입력방법 (0) | 2019.01.22 |
[Django] Performing raw SQL queries : SQL 쿼리 맵핑 (0) | 2019.01.21 |
[Django] Custom template tags and filters 사용자 정의 템플릿 태그(1) (0) | 2019.01.19 |