【问题标题】:Flask 0.10 giving unicode error on session cookieFlask 0.10 在会话 cookie 上给出 unicode 错误
【发布时间】:2013-06-10 10:33:44
【问题描述】:

升级到 Flask 0.10 后,我收到此错误:

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

flask/app.py 第 1693 行的 self.save_session(ctx.session, response) 给出的是: flask.sessions.SecureCookieSession({'_id': 'iB\rOU#\xf7BO\x08^\xa6\xd1)v\xad', '_flashes': [('message', '请登录后访问此页面。 ')]})

所以,如果我没看错的话,会话会给出一个 id,flask 会尝试对其进行 unicode(并失败)。我不知道如何纠正这个问题(清空我的浏览器缓存以希望新的会话也没有帮助)。 任何人都可以就我应该做什么给我任何建议吗?

亲切的问候,

汽车

编辑:一些额外的信息。我的设置使用了flask、flask_mail、flask.ext.mongoengine 和flask.ext.security;我使用 MongoEngine: db = flask.ext.mongoengine.MongoEngine(app) 和烧瓶安全: user_datastore = flask.ext.security.MongoEngineUserDatastore(数据库,用户,角色) security = flask.ext.security.Security(app, user_datastore)

编辑:这似乎是一个双重问题: Flask Login: TypeError: decoding Unicode is not supported

(没看过,不好意思)

【问题讨论】:

  • 这个问题并不完全是重复的,因为那里的答案是通过降级到另一个版本来解决的,而这里 Flask 的作者给出了一个实际有效的答案。

标签: python flask flask-login


【解决方案1】:

这是Flask-Login 目前存在的问题。据我所知,它已在扩展的 git 版本中修复。

【讨论】:

【解决方案2】:

临时解决方法(感谢 Kave)正在降级 Flask 和 Werkzeug:

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

【讨论】:

  • 是的,请使用 Flask 0.9:0.9 没有任何问题,我们无意在准备好之前发布 Flask-Login。 (我们还没准备好。)
猜你喜欢
  • 2014-11-13
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
  • 2016-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多