Flask登录:TypeError:不支持解码Unicode

Flask登录:TypeError:不支持解码Unicode,flask,uwsgi,flask-login,Flask,Uwsgi,Flask Login,我正在以堆栈的形式运行flask、pymongo和flask登录 我的flask应用程序在本地运行良好,但一旦我将其与uwsgi一起部署到nginx上,flask\u登录扩展就会出现一个奇怪的unicode错误 简而言之: TypeError: decoding Unicode is not supported [pid: 21753|app: 0|req: 5/5] 84.207.253.34 () {38 vars in 600 bytes} [Thu Jun 13 16:51:08 20

我正在以堆栈的形式运行flask、pymongo和flask登录

我的flask应用程序在本地运行良好,但一旦我将其与uwsgi一起部署到nginx上,flask\u登录扩展就会出现一个奇怪的unicode错误

简而言之:

TypeError: decoding Unicode is not supported
[pid: 21753|app: 0|req: 5/5] 84.207.253.34 () {38 vars in 600 bytes} [Thu Jun 13 16:51:08 2013] GET / => generated 0 bytes in 4 msecs (HTTP/1.1 500) 0 headers in 0 bytes (0 switches on core 0)
Traceback (most recent call last):
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask/app.py", line 1473, in full_dispatch_request
    rv = self.preprocess_request()
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask/app.py", line 1666, in preprocess_request
    rv = func()
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask_login.py", line 311, in _load_user
    deleted = self._session_protection()
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask_login.py", line 325, in _session_protection
    ident = _create_identifier()
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask_login.py", line 133, in _create_identifier
    request.headers.get("User-Agent")), 'utf8', errors='replace')
TypeError: decoding Unicode is not supported
回溯:

TypeError: decoding Unicode is not supported
[pid: 21753|app: 0|req: 5/5] 84.207.253.34 () {38 vars in 600 bytes} [Thu Jun 13 16:51:08 2013] GET / => generated 0 bytes in 4 msecs (HTTP/1.1 500) 0 headers in 0 bytes (0 switches on core 0)
Traceback (most recent call last):
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask/app.py", line 1473, in full_dispatch_request
    rv = self.preprocess_request()
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask/app.py", line 1666, in preprocess_request
    rv = func()
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask_login.py", line 311, in _load_user
    deleted = self._session_protection()
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask_login.py", line 325, in _session_protection
    ident = _create_identifier()
  File "/myproject/myproject-env/local/lib/python2.7/site-packages/flask_login.py", line 133, in _create_identifier
    request.headers.get("User-Agent")), 'utf8', errors='replace')
TypeError: decoding Unicode is not supported

为什么在开发环境中不会发生这种情况?因此,它一定与nginx上的uwsgi有关。有什么建议吗?非常感谢

我在开发环境中遇到了同样的问题,Flask 0.10和Flask Login 0.1.3

看起来flask 0.10现在有unicode请求头,所以flask登录在尝试对已编码的字符串进行编码时会爆炸

您的登录人已经在使用它了:

(编辑)通往暂时幸福的瞬间之路(如github twin thread,thx Kofalt&Kave!)


根据losu S,这似乎是一个0.10的问题。尝试使用以下方法在虚拟环境中安装Flask的早期版本:

pip install Flask==0.9

仅通过降级flask无法解决此问题,因为即使安装
flask==0.9
也会安装最新的依赖项,这是一个糟糕的
werkzeug==0.9
因此,您最好按以下顺序安装:

pip install werkzeug==0.8.3
pip install flask==0.9
pip install Flask-Login==0.1.3
flask登录,然后可以是最新版本0.1.3。没有造成伤害。 这个堆栈适合我


希望这能有所帮助,直到紧急补丁发布。

我的fork解决了这个问题:

https://github.com/jgelens/flask-login/tree/0.1.4
安装时使用:

pip install https://github.com/jgelens/flask-login/archive/0f07b8fa783c40d09cb284d442a526f067bab28b.zip#egg=flask-login

谢谢你的链接。我现在已经删除了整个虚拟环境并创建了一个新的堆栈。但是我仍然得到了同样的错误:
Babel==0.9.6 Flask==0.9 Flask Assets==0.8 Flask Babel==0.8 Flask Bcrypt==0.5.2 Flask Login==0.1.3 Flask WTF==0.8.3 Jinja2==2.7 MarkupSafe==0.18 WTForms==1.0.4 Werkzeug==0.9 argparse==1.2.1.2.1闭包==20121212 cssmin==0.1.4 isodate==0.4.9 jsonschema==2.0.0.0.0.5 python==2.0.5.5.5.5.5.5.2pytz==2013b rauth==0.5.4请求==1.1.0 speaklater==1.3 webassets==0.8 wsgiref==0.1.2
此处相同Kave,也许werkzeug也必须降级?但是,已请求对flask登录进行紧急修复。在发布之前,请使用flask 0.9,或者自己对flask登录进行修补。在我看来,这是最好的做法。回复:紧急修补程序:考虑到flask登录的维护人员,我不希望它出现。从外观上看,Flask登录将不支持Flask v0.10,直到出现清理分支。AFAIC,这很好:只是暂时不要使用Flask 0.10:)还要注意这是一个上游bug。Flask登录已更新,但当然无法解决上游问题。您可能更喜欢使用now。不幸的是,这对我不起作用,尽管我怀疑问题出在Flask OauthLib上。
pip install Flask==0.9
不解决问题,因为它将下载
werkzeug==0.9
所以您必须使用
pip install Flask==0.9 werkzeug==0.8.3