Wie kann ich mich bei django mit tastypie anmelden

Ich versuche zu überschreiben is_authenticated in meiner benutzerdefinierten Authentifizierung. Ich habe so etwas einfaches (so):

class MyAuthentication(BasicAuthentication): def __init__(self, *args, **kwargs): super(MyAuthentication, self).__init__(*args, **kwargs) def is_authenticated(self, request, **kwargs): return True 

Dann habe ich in meiner ModelResource

 class LoginUserResource(ModelResource): class Meta: resource_name = 'login' queryset = User.objects.all() excludes = ['id', 'email', 'password', 'is_staff', 'is_superuser'] list_allowed_methods = ['post'] authentication = MyAuthentication() authorization = DjangoAuthorization() 

Ich "error_message": "column username is not unique" immer einen 500 Fehler zurück mit "error_message": "column username is not unique" . Ich habe nur einen Benutzernamen in der db und es ist der Benutzer, den ich versuche zu authentifizieren.

Irgendwelche Ideen, warum es diesen Fehler zurückgibt? Wie kann ich einen api-Client anmelden?

Danke für die Hilfe.

2 Solutions collect form web for “Wie kann ich mich bei django mit tastypie anmelden”

Ihr Ansatz wird versuchen, einen neuen Benutzer mit dem Benutzernamen zu erstellen, mit dem Sie authentifizieren. Dies wird bei der DB-Ebene aufblasen, wie Sie bemerkt haben, dass ein solcher Benutzer bereits existiert.

Was Sie wollen, ist eine UserResource zu erstellen, fügen Sie eine Methode auf, dass die Benutzer können Post und Login mit Daten übergeben in Benutzername / Passwort.

 from django.contrib.auth.models import User from django.contrib.auth import authenticate, login, logout from tastypie.http import HttpUnauthorized, HttpForbidden from django.conf.urls import url from tastypie.utils import trailing_slash class UserResource(ModelResource): class Meta: queryset = User.objects.all() fields = ['first_name', 'last_name', 'email'] allowed_methods = ['get', 'post'] resource_name = 'user' def override_urls(self): return [ url(r"^(?P<resource_name>%s)/login%s$" % (self._meta.resource_name, trailing_slash()), self.wrap_view('login'), name="api_login"), url(r'^(?P<resource_name>%s)/logout%s$' % (self._meta.resource_name, trailing_slash()), self.wrap_view('logout'), name='api_logout'), ] def login(self, request, **kwargs): self.method_check(request, allowed=['post']) data = self.deserialize(request, request.raw_post_data, format=request.META.get('CONTENT_TYPE', 'application/json')) username = data.get('username', '') password = data.get('password', '') user = authenticate(username=username, password=password) if user: if user.is_active: login(request, user) return self.create_response(request, { 'success': True }) else: return self.create_response(request, { 'success': False, 'reason': 'disabled', }, HttpForbidden ) else: return self.create_response(request, { 'success': False, 'reason': 'incorrect', }, HttpUnauthorized ) def logout(self, request, **kwargs): self.method_check(request, allowed=['get']) if request.user and request.user.is_authenticated(): logout(request) return self.create_response(request, { 'success': True }) else: return self.create_response(request, { 'success': False }, HttpUnauthorized) 

Jetzt können Sie einen POST an http://hostname/api/user/login mit den Daten senden { 'username' : 'me', 'password' : 'l33t' } .

Dieses Update entfernt Sicherheitsprobleme auf der GET-Methode. Arbeiten auf Django 1.5.4.

 class UserResource(ModelResource): class Meta: queryset = User.objects.all() resource_name = 'user' allowed_methods = ['post'] def prepend_urls(self): return [ url(r"^user/login/$", self.wrap_view('login'), name="api_login"), url(r"^user/logout/$", self.wrap_view('logout'), name='api_logout'), ] def login(self, request, **kwargs): self.method_check(request, allowed=['post']) data = self.deserialize(request, request.raw_post_data, format=request.META.get('CONTENT_TYPE', 'application/json')) username = data.get('username', '') password = data.get('password', '') user = authenticate(username=username, password=password) if user: if user.is_active: login(request, user) return self.create_response(request, { 'success': True }) else: return self.create_response(request, { 'success': False, 'reason': 'disabled', }, HttpForbidden ) else: return self.create_response(request, { 'success': False, 'reason': 'incorrect', }, HttpUnauthorized ) def logout(self, request, **kwargs): self.method_check(request, allowed=['post']) if request.user and request.user.is_authenticated(): logout(request) return self.create_response(request, { 'success': True }) else: return self.create_response(request, { 'success': False }, HttpUnauthorized) 
  • Holen Sie sich Modellobjekt von tastypie uri?
  • Django tastypie Update zwei Modelle
  • Django JSON Antwort Fehler Status
  • Finden Sie die beliebtesten Tag Taggit Tastypie Django
  • Django TastyPie Patch zu einem Many-to-Many
  • Warum ist voll = true bricht Ressourcen Verhalten in Django Tastypie?
  • Django Tastypie Viele zu viele (Selbst-) Feld-Update mit einem PATCH oder PUT Anfrage?
  • Kein Modul namens Konstanten
  • Django Tastypie Advanced Filtering: Wie man komplexe Lookups mit Q-Objekten macht
  • Zugriff auf Kommentare zu einem Objekt über umgekehrte Beziehung mit Tastypie
  • Ausschliessen Sie einige Felder in Tastypie Post Daten
  • Python ist die beste Programmiersprache der Welt.