【发布时间】:2009-11-23 10:59:58
【问题描述】:
因为我不想使用 Django 的内置身份验证系统(也许我应该这样做,如果是这种情况请告诉我),我创建了一个简单的小 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/')
问题是,当我想用它来阻止未经授权的访问时,我必须在每个单独的视图方法中使用这段代码 sn-p:
def example(req):
auth = CustomerAuth(req.session)
if not auth.is_logged_in():
return auth.redirect_to_login()
您可以想象,这会产生相当丑陋和重复的代码。有什么更好的方法来做到这一点?我应该使用 Django 的身份验证框架吗?
【问题讨论】:
标签: django authentication