Tastypie propose plusieurs méthodes d'authentification
(ApiKeyAuthentication
, BasicAuthentification
,
OAuthAuthentication
). Malheureusement,
elles ne déclenchent pas de signaux lors du succès de l'opération. On va
voir comment faire notre propre classe d'authentification pour envoyer
un signal lorsque l'utilisateur réussi à se connecter.
D'après la doc de
Tastypie,
on peut implémenter notre authentification de cette façon :
from tastypie.authentication import Authentication
class SillyAuthentication(Authentication):
def is_authenticated(self, request, **kwargs):
if 'daniel' in request.user.username:
return True
return False
# Optional but recommended
def get_identifier(self, request):
return request.user.username
Du coup, on a juste à récupérer le résultat de l'authentification et
envoyer le signal si on a True
.
from tastypie.authentication import BasicAuthentication
from django.contrib.auth.signals import user_logged_in
class SignaledBasicAuthentication(BasicAuthentication):
""" Send a signal when finish BasicAuthentication """
def is_authenticated(self, request, **kwargs):
authorized = super(SignaledBasicAuthentication, self).is_authenticated(request, **kwargs)
if authorized is True:
user_logged_in.send(sender=request.user.__class__, request=request, user=request.user)
return authorized
Dans l'exemple ci-dessus, on surcharge une BasicAuthentication, mais
toutes les classes d'authentification de tastypie sont sur le même
schéma.