码农家园

关闭
导航

关于google app engine:flask_login:UnicodeDecodeError:’ascii’编解码器无法解码字节


flaskflask-logingoogle-app-enginejinja2

flask_login: UnicodeDecodeError: 'ascii' codec can't decode byte

我知道ascii/unicode的问题,并看过这样的文章。

然而,我在GAE上得到的错误消息并没有给我任何线索,说明这个问题是在哪里发生的,以便修复它。它似乎发生在cookie_digest in flask_login上?但是为什么呢?

有人能给我指个方向吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Exception on /login [POST]
Traceback (most recent call last):
  File"/base/data/home/apps/s~service/1-0-1-0.369408465659150157/lib/flask/app.py", line 1687, in wsgi_app
    response = self.full_dispatch_request()
  File"/base/data/home/apps/s~service/1-0-1-0.369408465659150157/lib/flask/app.py", line 1362, in full_dispatch_request
    response = self.process_response(response)
  File"/base/data/home/apps/s~service/1-0-1-0.369408465659150157/lib/flask/app.py", line 1564, in process_response
    response = handler(response)
  File"/base/data/home/apps/s~service/1-0-1-0.369408465659150157/lib/flask_login.py", line 344, in _update_remember_cookie
    self._set_cookie(response)
  File"/base/data/home/apps/s~service/1-0-1-0.369408465659150157/lib/flask_login.py", line 363, in _set_cookie
    data = encode_cookie(str(session['user_id']))
  File"/base/data/home/apps/s~service/1-0-1-0.369408465659150157/lib/flask_login.py", line 444, in encode_cookie
    return u'{0}|{1}'.format(payload, _cookie_digest(payload))
  File"/base/data/home/apps/s~service/1-0-1-0.369408465659150157/lib/flask_login.py", line 688, in _cookie_digest
    key = key.encode('utf-8')  # ensure bytes
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc9 in position 0: ordinal not in range(128)

编辑:

在挖了瓶子的登录名后,似乎是用密匙进行的。真奇怪!!!!我在它周围放了一些日志,以了解为什么只有我们的应用程序的一个用户会发生这种情况。而且它可以复制,每次她尝试登录时,都会得到一个例外。但除了她,我不能复制它。

1
2
3
4
5
6
7
8
def _cookie_digest(payload, key=None):
    if key is None:
        key = current_app.config['SECRET_KEY']
    logging.info(u'key - cookie - {0}'.format(key))
    if hasattr(key, 'encode'):
        key = key.encode('utf-8')  # ensure bytes

    return hmac.new(key, payload.encode('utf-8'), sha1).hexdigest()

这是flask登录中的一个bug,已经解决了。请参阅带修复程序的请求。

相关讨论

  • 我安装了最新的flask登录(pip install flask-login),但仍然遇到同样的问题。修复程序是否已发布?
  • PYPI上最新的flask登录版本是0.2.6,7/18发布。这个修复是在8月初合并的,所以是的,您需要等待下一个版本或者从Git安装。
  • 哦,是的,我必须从Git安装它,它现在可以工作了。对于这样一个漏洞的修复还没有发布,真是太可惜了。


    Copyright ©  码农家园 联系:[email protected]