3
Django의 in-build 인증 시스템을 사용하고 싶지 않았기 때문에 (아마도 내가해야 할 것입니다.이 경우에 대해 알려주십시오.) 간단한 간단한 auth 클래스를 만들었습니다 :장고와 사용자 정의 인증?
import random
import hashlib
from myapp import models
class CustomerAuth:
key = 'customer'
def __init__(self, session):
self.session = session
def attempt(self, email_address, password):
password_hash = hashlib.sha1(password).hexdigest()
try:
return models.Customer.objects.get(
email_address=email_address,
password_hash=password_hash)
except models.Customer.DoesNotExist:
return None
def login(self, customer):
self.session[self.key] = customer
def logout(self):
if self.session.has_key(self.key):
self.session[self.key] = None
def is_logged_in(self):
return self.session.has_key(self.key)
and self.session[self.key] != None
def get_active(self):
if self.is_logged_in():
return self.session[self.key]
else:
raise Exception('No user is logged in.')
def redirect_to_login(self):
return HttpResponseRedirect('/login/')
def redirect_from_login(self):
return HttpResponseRedirect('/account/')
문제는, 무단 액세스를 막기 위해이 코드를 사용하려면 모든 단일 뷰 메소드에서이 코드 스 니펫을 사용해야합니다.
def example(req):
auth = CustomerAuth(req.session)
if not auth.is_logged_in():
return auth.redirect_to_login()
상상할 수 있듯이이 코드는 상당히 추악하고 반복적 인 코드를 생성합니다. 이 일을하는 더 좋은 방법은 무엇입니까? 장고의 인증 프레임 워크를 사용해야합니까?
감사합니다. 지금 구현했습니다. 놀랍게도 실제로 실제로는 매우 쉽습니다. 게다가, 이메일 주소로 인증을하기 때문에 "필수"를 통해서도 사용자 이름 속성을 사용할 필요가 없습니다. –