django 이중 시스템 사용자 검증 원리 실현
4137 단어 django
쓰다
django 자체 auth 모듈로 사용자 검증 로그인 가능
사용자가 사이트에 로그인하면django는 두 개의 중간 키를 통해 사용자의 로그인을 검증한다.
django.contrib.sessions.middleware.SessionMiddleware 및
django.contrib.auth.middleware.AuthenticationMiddleware
쓰다
1. 사용자가 로그인에 성공하면 서버는sessionid를 생성하여 데이터베이스에 저장하고 사용자 브라우저 쿠키에 쓰기
2. 사용자가 다시 방문하면 먼저 중간 키인 Session Middleware는sessionid라는 쿠키를 읽고 이 값에 따라 데이터베이스를 조회하고 사용자 id를 가져와session 대상을 생성합니다
3. 그리고 중간에 Authentication Middleware를 만들어서session 대상에 따라 사용자user 대상을 가져와 Request로 저장합니다.user
4. 대응하는 보기 함수를 처리할 때 리퀘스트에 저장된 해당user 대상에 대해 로그인 여부를 판단할 수 있습니다
쓰다
중간 Authentication Middleware
파일:django/contrib/auth/middleware.py
from django.contrib import auth
from django.core.exceptions import ImproperlyConfigured
class LazyUser(object):
def __get__(self, request, obj_type=None):
if not hasattr(request, '_cached_user'):
from django.contrib.auth import get_user
request._cached_user = get_user(request)
return request._cached_user
class AuthenticationMiddleware(object):
def process_request(self, request):
assert hasattr(request, 'session'), "The Django authentication middleware requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'."
request.__class__.user = LazyUser()
return None
이중 시스템 사용자 검증 원리를 실현하다
쓰다
이중 시스템 사용자 검증을 실현하려면 정상적인django 검증 절차에 따라 로그인 검증의 중간부품을 다시 쓰지 않습니다
구체적인 실현 원리:
사용자가 시스템 A에 접근할 것을 요청하면 시스템 A 중간부품도 상응하는 쿠키 값을 먼저 읽는다.쿠키 값을 받은 후 정상적인 절차처럼 데이터베이스에 조회하여user 대상을 가져오지 않습니다
그리고 이 값을 시스템 B에 보내고 시스템 B가 검증하며 시스템 B가 검증을 통과하면 이 사용자의username을 보내고 통과하지 못하면 빈 값을 보냅니다.
시스템 A에서 username을 가져오면 auth사용자 테이블에서 검색하고 없으면 사용자 개체(get or create)를 생성합니다.
마지막으로 사용자 대상을 Request에 저장합니다.사용자
구체적 조작
쓰다
1.setting 파일의 중간부품'django.contrib.auth.middleware.AuthenticationMiddleware',
자신의 중간부품으로 바꾸기'myauth.middleware.AuthenticationMiddleware',
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
#'django.contrib.auth.middleware.AuthenticationMiddleware',
'myauth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
쓰다
2. app myauth를 만들고 파일middleware를 만듭니다.py
myauth/middleware.py
from django.conf import settings
from django.contrib.auth.models import AnonymousUser, User
class LazyUser(object):
def __get__(self, request, obj_type=None):
if not hasattr(request, '_cached_user'):
#from django.contrib.auth import get_user
request._cached_user = get_user(request)
return request._cached_user
class AuthenticationMiddleware(object):
def process_request(self, request):
assert hasattr(request, 'session'), "The Django authentication middleware requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'."
request.__class__.user = LazyUser()
def get_user(request):
session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME, None)
user_dict = get_user_from_icnet(session_key)
if user_dict:
user, iscreate = User.objects.get_or_create(username=user_dict['username'])
else:
user = AnonymousUser()
return user
def get_user_from_icnet(session_key):
user_dict = {'username': 'test'}
return user_dict
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.