Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flask Login: TypeError: decoding Unicode is not supported

I am running flask, pymongo and flask-login as a stack.

My flask app is running fine locally, but once I deploy it with uwsgi on nginx, I get a strange unicode error from flask_login extension.

In short:

TypeError: decoding Unicode is not supported

Traceback:

[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

Why is this not happening in dev environment? Hence it must be somehow related to uwsgi on nginx. Any suggestions? Many Thanks

like image 278
Houman Avatar asked Jun 13 '13 16:06

Houman


4 Answers

The problem won't be solved by downgrading flask alone, because even installing flask==0.9 would install the latest dependencies, which is the bad werkzeug==0.9 Hence you better install the following in this order:

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

flask login, can then be the latest version 0.1.3. No harm done there. This stack works for me.

Hope this helps, until the emergency patch is out.

like image 175
Houman Avatar answered Oct 24 '22 07:10

Houman


I am having the very same problem on my dev environment, with Flask 0.10 and Flask-Login 0.1.3

looks like flask 0.10 now has unicode request headers so flask-login explodes when trying to encode an already encoded string...

Flask_login people are already working on it: https://github.com/maxcountryman/flask-login/issues/78

(EDIT) instant road to temporary happiness (as seen in github twin thread, thx Kofalt & Kave!)

pip uninstall flask ; pip uninstall werkzeug ; pip uninstall Flask-Login ; pip install werkzeug==0.8.3 ; pip install flask==0.9 ; pip install Flask-Login==0.1.3
like image 43
Iosu S. Avatar answered Oct 24 '22 06:10

Iosu S.


My fork which fixes this issue:

https://github.com/jgelens/flask-login/tree/0.1.4

Install using:

pip install https://github.com/jgelens/flask-login/archive/0f07b8fa783c40d09cb284d442a526f067bab28b.zip#egg=flask-login
like image 2
Jeffrey Gelens Avatar answered Oct 24 '22 06:10

Jeffrey Gelens


As per losu S., this looks to be a Flask 0.10 problem. Try to install previous version of Flask in your virtual environment using:

pip install Flask==0.9
like image 1
marcoseu Avatar answered Oct 24 '22 07:10

marcoseu