Ich httpie mit meiner benutzerdefinierten Authentifizierung testenDjango (mit TokenAuthentication): „non_field_errors“: „Kann nicht mit angegebenen Anmeldeinformationen anmelden
http POST http://127.0.0.1:8000/api-token-auth/ username='username1' password='Password123'
Ich habe eine benutzerdefinierte Auth-Objekt erstellen AbstractUser
verwenden..
mit TokenAuthentication folgte ich die Dokumentation und fügte hinzu, meine benutzerdefinierte TokenAuthentication in meinen REST_FRAMEWORK
Einstellungen:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'regis.models.CustomAuthentication',
)
}
Und hinzugefügt rest_framework.authtoken
in meinen installierten Apps.
Mein AUTHENTICATION_BACKEND
sich wie folgt:
AUTHENTICATION_BACKENDS = [ 'regis.models.CustomAuthentication' ]
Und hier ist meine benutzerdefinierte Authentifizierungsklasse:
class CustomAuthentication(authentication.TokenAuthentication):
def authenticate(self, request):
username = request.META.get('X_USERNAME')
print(username)
user_model = get_user_model()
if not username:
return None
try:
user = user_model.objects.get(username=username)
except User.DoesNotExist:
raise exceptions.AuthenticationFailed('No such user')
return (user, None)
urls.py:
urlpatterns += [
url(r'^api-token-auth/', views.obtain_auth_token),
]
Ich bin so ziemlich das folgende DRF-Dokumente (http://www.django-rest-framework.org/api-guide/authentication/#custom-authentication). Wenn weitere Informationen benötigt werden, um das Problem zu lösen, lass es mich wissen und ich werde es aktualisieren. Jede Hilfe bei dem, was mir fehlt, wäre großartig.
Hinzufügen: Nur aus Neugier, muss ich ein benutzerdefiniertes Authentifizierungssystem erstellen, wenn ich einen benutzerdefinierten Benutzer habe?
UPDATE:
Ich löschte nur die Klasse oben, und habe soeben die rest_framework.authentication.TokenAuthentication
in meinen REST_FRAMEWORK Einstellungen. Ich verwende immer noch eine benutzerdefinierte Authentifizierung, die meinen Benutzer abruft.
Es sieht wie folgt aus (werde es nicht formatiert saugt SO bei Formatierungscode von VIM.):
class CustomAuthentication(object):
def authenticate(self, email=None, password=None):
User = get_user_model()
try:
user = User.objects.get(email=email)
except User.DoesNotExist:
return None
if user.check_password(password):
return user
return None
def get_user(self, user_id):
try:
user_model = get_user_model()
user = user_model.objects.get(pk=user_id)
except User.DoesNotExist:
return None
ich diese Django docs verwendet diesen Code zu erstellen: https://docs.djangoproject.com/en/1.10/topics/auth/customizing/
Nur um Ihre Neugier zu beantworten: Nein, Sie benötigen keine benutzerdefinierte Authentifizierung, wenn Sie einen benutzerdefinierten Benutzer verwenden. Der Build, den ich bei der Arbeit verwende, hat einen benutzerdefinierten Benutzer und verwendet das Standard-ModelBackend, das mit Django ausgeliefert wird. :) – Neelik
@Neelik ayyyee hook mich mit einem Job dort! –
Vielleicht, wenn das Unternehmen ein bisschen wächst: P Wir sind immer noch eine kleine lokale Gruppe. – Neelik