2013-06-13 3 views
6

Nach dem Upgrade 0,10 bis Flask, ich diesen Fehler:Flask 0.10 geben Unicode-Fehler auf Session-Cookie

flask.debughelpers.UnexpectedUnicodeError 
UnexpectedUnicodeError: A byte string with non-ASCII data was passed to the session system which can only store unicode strings. Consider base64 encoding your string (String was 'iB\rOU#\xf7BO\x08^\xa6\xd1)v\xad') 

Traceback (most recent call last) 
File "/srv/www/li/venv/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__ 
return self.wsgi_app(environ, start_response) 
File "/srv/www/li/venv/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app 
response = self.make_response(self.handle_exception(e)) 
File "/srv/www/li/venv/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception 
reraise(exc_type, exc_value, tb) 
File "/srv/www/li/venv/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app 
response = self.full_dispatch_request() 
File "/srv/www/li/venv/lib/python2.7/site-packages/flask/app.py", line 1479, in full_dispatch_request 
response = self.process_response(response) 
File "/srv/www/li/venv/lib/python2.7/site-packages/flask/app.py", line 1693, in process_response 
self.save_session(ctx.session, response) 
File "/srv/www/li/venv/lib/python2.7/site-packages/flask/app.py", line 837, in save_session 
return self.session_interface.save_session(self, session, response) 
File "/srv/www/li/venv/lib/python2.7/site-packages/flask/sessions.py", line 321, in save_session 
val = self.get_signing_serializer(app).dumps(dict(session)) 
File "/srv/www/li/venv/lib/python2.7/site-packages/itsdangerous.py", line 471, in dumps 
return self.make_signer(salt).sign(self.dump_payload(obj)) 
File "/srv/www/li/venv/lib/python2.7/site-packages/itsdangerous.py", line 676, in dump_payload 
json = super(URLSafeSerializerMixin, self).dump_payload(obj) 
File "/srv/www/li/venv/lib/python2.7/site-packages/itsdangerous.py", line 454, in dump_payload 
return self.serializer.dumps(obj) 
File "/srv/www/li/venv/lib/python2.7/site-packages/flask/sessions.py", line 82, in dumps 
return json.dumps(_tag(value), separators=(',', ':')) 
File "/srv/www/li/venv/lib/python2.7/site-packages/flask/sessions.py", line 72, in _tag 
return dict((k, _tag(v)) for k, v in iteritems(value)) 
File "/srv/www/li/venv/lib/python2.7/site-packages/flask/sessions.py", line 72, in <genexpr> 
return dict((k, _tag(v)) for k, v in iteritems(value)) 
File "/srv/www/li/venv/lib/python2.7/site-packages/flask/sessions.py", line 80, in _tag 
u'base64 encoding your string (String was %r)' % value) 
UnexpectedUnicodeError: A byte string with non-ASCII data was passed to the session system which can only store unicode strings. Consider base64 encoding your string (String was 'iB\rOU#\xf7BO\x08^\xa6\xd1)v\xad') 

Was die self.save_session (ctx.session, Response) für Kolben/app.py Linie 1693 gibt ist das: flask.sessions.SecureCookieSession ({'_ id': 'iB \ rOU # \ xf7BO \ x08^\ xa6 \ xd1) v \ xad', '_blitz': [('nachricht', 'Bitte melden Sie sich an Greife auf diese Seite zu. ')]})

Also, wenn ich das richtig lese, gibt die Sitzung eine ID, die flask versucht Unicode (und scheitert an). Ich habe keine Ahnung, wie ich das beheben kann (das Leeren meines Browser-Cache, um auf eine neue Sitzung zu hoffen, hat auch nicht geholfen). Kann mir jemand irgendwelche Vorschläge machen, was ich tun soll?

Mit freundlichen Grüßen

Carst

edit: einige zusätzliche Informationen. Mein Setup verwendet flask, flask_mail, flask.ext.mongoengine und flask.ext.security; Ich benutze MongoEngine: db = flask.ext.mongoengine.MongoEngine (app) und Kolben-Sicherheit: user_datastore = flask.ext.security.MongoEngineUserDatastore (db, Benutzer, Rolle) security = flask.ext.security.Security (app, user_datastore)

Edit: es erscheint eine doppelte Frage zu sein: Flask Login: TypeError: decoding Unicode is not supported

(hatte es nicht gesehen, sorry)

+0

Diese Frage ist nicht gerade ein Duplikat, da die Antworten dort durch die Herabstufung auf eine andere Version zu lösen, hier während der Autor von Flask gab eine Antwort, die tatsächlich funktioniert. – Lipis

Antwort

2

eine vorübergehende Lösung (dank Kave) ist Herabstufung sowohl Flasche und Werkzeug:

pip install werkzeug==0.8.3 
pip install flask==0.9 
pip install Flask-Login==0.1.3 
+0

Ja, bitte benutzen Sie Flask 0.9: Es ist nichts falsch mit 0.9 und wir haben nicht die Absicht, Flask-Login zu veröffentlichen, bevor wir fertig sind. (Wir sind nicht bereit.) – maxcountryman

+3

@maxcountryman bist du jetzt bereit? Es klappt.. – Lipis

10

, die derzeit ist ein Problem mit Flask-Login. Soweit ich weiß, ist es in der Git-Version der Erweiterung behoben.

+0

danke! Ich werde es überprüfen (und danke für Flask machen :) Für Leute, die diesen Beitrag finden, siehe auch: https://github.com/maxcountryman/flask-login/issues/78 – Carst

+0

Dies wurde in keiner Version behoben der Erweiterung. – maxcountryman

Verwandte Themen