from django.contrib.auth import authenticate from django.contrib.auth.models import AnonymousUser from django.http import HttpResponse class TokenAPIAuthentication(object): def __init__(self, auth_func=authenticate, realm='API'): self.auth_func = auth_func self.realm = realm def is_authenticated(self, request): user_pk = request.POST.get("user") or request.GET.get("user") token = request.POST.get("token") or request.GET.get("token") if not user_pk or not token: return False request.user = self.auth_func(pk=user_pk, token=token) or AnonymousUser() return not request.user in (False, None, AnonymousUser()) def challenge(self): resp = HttpResponse("Authorization Required") resp['WWW-Authenticate'] = 'Basic realm="%s"' % self.realm resp.status_code = 401 return resp