Ich arbeite an einem alten Projekt von mir, und ich entschied mich, Python 3, speziell 3.4 zu testen.Migration von Python 2.7 auf 3.4 Token Generator Codierung
Ich baue im Pyramid-Framework und ich muss eine randomisierte für die Authentifizierung Zwecke generieren. Zuvor habe ich einfach ein zufälliges Bit zur Benutzer-ID hinzugefügt und alles war in Ordnung, aber mit Python 3 habe ich einige Probleme mit der Codierung.
Dies ist, wie ich verwendet, es zu tun:
from base64 import b64encode, b64decode
from Crypto.Hash import HMAC, SHA
def create_token(request, username):
r = uuid4().hex + b64encode(json.dumps({'username': username}))
sig = HMAC.new(secret, r.encode('UTF-8'), SHA).hexdigest()
return u"{}{}".format(sig, r)
Aber jetzt bekomme ich den Fehler:
File "/security.py", line 30, in create_token
r = uuid4().hex + b64encode(json.dumps({'username': username}))
File "/.pyenv/versions/3.4.0/lib/python3.4/base64.py", line 63, in b64encode
encoded = binascii.b2a_base64(s)[:-1]
TypeError: 'str' does not support the buffer interface
So habe ich versucht, den Benutzernamen codiert, und ich bekomme
TypeError: b'admin' is not JSON serializable
Also der Encoder will Bytes und JSON wollen Strings, wie kann ich das in Python 3 machen?
Ihr Traceback stimmt nicht mit Ihrer veröffentlichten Funktion überein. Zum Beispiel gibt es in Ihrem geposteten Code keine Benutzer-ID. –
Benutzer-ID wurde in Benutzername geändert. – Niel
Das stimmt jedoch nicht mit Ihrem Traceback überein. Die Zeile 'userid' im Traceback sieht aus, als wäre sie Teil einer größeren Wörterbuchanweisung über mehrere Zeilen hinweg. –