python-2.7flaskflask-restfulflask-jwt

Flask-JWT generates error when Debug=False


I am playing around with Flask. I have created an API using Flask-Restful and Flask-JWT.

When Debug=True in Flask, and I do not send the Authorization Header, I get the response as enter image description here

However, when the debug=False, the response returned is Internal Server Error with this stack trace,

[2017-01-19 19:43:10,753] ERROR in app: Exception on /api_0_1/deals [GET]
Traceback (most recent call last):
  File "C:\Users\ARFATS~1\Desktop\Dealflow\venv\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\ARFATS~1\Desktop\Dealflow\venv\lib\site-packages\flask\app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\ARFATS~1\Desktop\Dealflow\venv\lib\site-packages\flask_restful\__init__.py", line 477, in wrapper
    resp = resource(*args, **kwargs)
  File "C:\Users\ARFATS~1\Desktop\Dealflow\venv\lib\site-packages\flask_jwt\__init__.py", line 176, in decorator
    _jwt_required(realm or current_app.config['JWT_DEFAULT_REALM'])
  File "C:\Users\ARFATS~1\Desktop\Dealflow\venv\lib\site-packages\flask_jwt\__init__.py", line 155, in _jwt_required
    headers={'WWW-Authenticate': 'JWT realm="%s"' % realm})
JWTError: Authorization Required. Request does not contain an access token


I would like Flask-JWT to respond with the response which is there when Debug=True. However, I cannot use debug on Production servers.

One way is to use my own jwt_required decorator. Is there any other way?

Also, I would be happy to know what I am missing, if any.

Thanks


Solution

  • You will need to add this setting to your flask app:

    app.config['PROPAGATE_EXCEPTIONS'] = True
    

    When debug is true, PROPAGATE_EXCEPTIONS is also set to true by default.

    Perhaps consider checking out flask-jwt-extended instead (https://github.com/vimalloc/flask-jwt-extended), it takes care of the PROPAGATE_EXCEPTIONS for you. It aims to replace the abandoned flask-jwt library, and add some conviences when working with JWTs (such as refresh tokens, easily adding custom data to the JWTs, fresh vs non-fresh tokens, and more). Full disclosure, I'm the author of that extension.

    Cheers.