Parce que je ne voulais pas utiliser le système d'authentification de Django en construction (peut-être que je devrais faire, s'il vous plaît me dire si cela est le cas), je crée une classe peu auth simple:Authentification personnalisée avec django?
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/')
Le problème est , que lorsque je veux l'utiliser pour arrêter l'accès non autorisé, j'utiliser cet extrait de code dans chaque méthode de vue unique:
def example(req):
auth = CustomerAuth(req.session)
if not auth.is_logged_in():
return auth.redirect_to_login()
Comme vous pouvez l'imaginer, cela donne un code assez laid et répétitif. Quelle est la meilleure façon de le faire? Dois-je utiliser le framework d'authentification de Django?
Merci - juste mis en œuvre maintenant. C'est en fait très facile à faire de façon surprenante. De plus, je n'ai pas besoin d'utiliser l'attribut de nom d'utilisateur même si c'est "requis" (puisque je veux faire l'authentification avec les adresses e-mail). –