Nic*_*ton 3 authentication django
因为我不想使用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/')
Run Code Online (Sandbox Code Playgroud)
问题是,当我想用它来阻止未经授权的访问时,我必须在每个单一的视图方法中使用这个代码片段:
def example(req):
auth = CustomerAuth(req.session)
if not auth.is_logged_in():
return auth.redirect_to_login()
Run Code Online (Sandbox Code Playgroud)
可以想象,这会产生相当丑陋和重复的代码.这样做的更好方法是什么?我应该使用Django的auth框架吗?
Dan*_*man 15
首先,是的,你应该使用Django的身份验证框架,并构建自己的自定义身份验证后端.
其次,无论如何,您都需要在视图中包含要限制访问权限的内容.最好的方法是通过视图上的装饰器.同样,Django的内置框架使您可以访问@login_required装饰器,它完全符合您的要求.
| 归档时间: |
|
| 查看次数: |
6373 次 |
| 最近记录: |