2013-06-13 15 views
6

Dopo l'aggiornamento a Boccetta 0,10, ottengo questo errore:Flask 0.10 dando errore unicode su cookie di sessione

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') 

Che self.save_session (ctx.session, risposta) per bambole/app.py linea 1693 dà è questo: flask.sessions.SecureCookieSession ({'_ id': 'iB \ rOU # \ xf7BO \ x08^\ xa6 \ xd1) v \ xad', '_flashes': [('messaggio', 'Effettua il login per accedere a questa pagina. ')]})

Quindi, se ho letto questo correttamente, la sessione dà un id che pallone cerca di unicode (e fallisce a). Non ho idea di come correggere questo (svuotare la cache del mio browser per sperare che una nuova sessione non sia stata d'aiuto). Qualcuno può darmi qualche suggerimento su cosa dovrei fare?

Cordiali saluti,

Carst

edit: qualche informazione in più. Il mio setup usa flask, flask_mail, flask.ext.mongoengine e flask.ext.security; io uso MongoEngine: db = flask.ext.mongoengine.MongoEngine (app) e pallone-sicurezza: user_datastore = flask.ext.security.MongoEngineUserDatastore (db, utente, ruolo) security = flask.ext.security.Security (app, user_datastore)

Edit: sembra essere una doppia domanda: Flask Login: TypeError: decoding Unicode is not supported

(non l'avessi visto, sorry)

+0

Questa domanda non è esattamente un duplicato in quanto le risposte non stanno risolvendo per il downgrade a un'altra versione, mentre qui l'autore di Flask ha dato una risposta che funziona davvero. – Lipis

risposta

2

Una soluzione temporanea (grazie a Kave) è declassamento sia Pallone e Werkzeug:

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

Sì, per favore usa Flask 0.9: non c'è niente di sbagliato in 0.9 e non abbiamo intenzione di fare una release di Flask-Login prima di essere pronti. (Non siamo pronti.) – maxcountryman

+3

@maxcountryman sei pronto ora? Funziona.. – Lipis

10

Questo è attualmente un problema con Flask-Login. Per quanto ne so è stato corretto nella versione git dell'estensione.

+0

grazie! lo verificherò (e grazie per aver reso Flask :) Per le persone che trovano questo post, vedi anche: https://github.com/maxcountryman/flask-login/issues/78 – Carst

+0

Questo non è stato corretto in nessuna versione dell'estensione. – maxcountryman