0

Ich habe versucht, meinen django-rest-framework-Testclient über die HTTP-Standardauthentifizierung anzumelden, um ein REST-API-Token zu erhalten. Aber musste feststellen, dass es nicht einmal meine zufällig generierten Benutzernamen und Passwort zu lang ist:Python: Ungültiger HTTP-Basis-Authentifizierungs-Header mit langer Base64-Zeichenfolge

def login_client(self): 
    uid = uuid.uuid4().hex 
    user = User.objects.create(username=uid, email="{}@foo.de".format(uid)) 
    user.set_password(uid) 
    user.save() 
    self.client.credentials(HTTP_AUTHORIZATION=self.get_knox_auth_header(uid, uid)) 
    response = self.client.post(reverse("knox_login")) 
    print response.content.data["token"] 

def get_knox_auth_header(self, username, password): 
    return "Basic {}".format("{}:{}".format(username, password).encode("base64")) 

Kopf wie folgt aussieht:

Basic MTAyZDc2OTJjY2E5NGY0NmFmNThkODNmNDc5NTc6MTAyZDc2OTJjY2E5NGY0NmFmNThkODNmNDc5 
NTc= 

Antwort:

{"detail":"Invalid basic header. Credentials string should not contain spaces."} 

Antwort

1

Grund, dass str .encode fügt langen base64-Strings automatisch Zeilenumbrüche hinzu. Der Code funktioniert gut, wenn Sie eine kürzere Eingabezeichenfolge erzwingen, z. uid = uuid.uuid4().hex[:28]

die Zeilenumbrüche zu vermeiden, es ist besser zu nutzen:

import base64 
"Basic {}".format(base64.b64encode("{}:{}".format(username, password))) 
Verwandte Themen