Python Eve Auth 无法 return 401 异常
Python Eve Auth can't return 401 exceptions
我是 运行 Python Eve 的 demo code,我在 Auth 部分遇到了问题。我是 运行 的代码与 repo 相同,除了 settings.py
中的 MongoDB URI。
# We want to seamlessy run our API both locally and on Heroku. If running on
# Heroku, sensible DB connection settings are stored in environment variables.
MONGO_URI = 'mongodb://****:****@localhost:27017/admin'
MONGO_DBNAME = 'apitest'
如果我在 Basic Auth 中输入正确的凭据(user=admin
passwd=secret
),一切正常,但如果我不输入授权 header 或不正确的凭据,我就不会得到 401,如我所料,但应用程序崩溃返回 500。这就是回溯。
[2019-03-28 12:55:32,082] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/eve/methods/common.py", line 317, in rate_limited
return f(*args, **kwargs)
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/eve/auth.py", line 79, in decorated
return auth.authenticate()
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/eve/auth.py", line 152, in authenticate
abort(401, description="Please provide proper credentials", response=resp)
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/werkzeug/exceptions.py", line 752, in abort
return _aborter(status, *args, **kwargs)
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/werkzeug/exceptions.py", line 733, in __call__
raise self.mapping[code](*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'response'
我只用烧瓶就能重现这个问题。看起来它与最新的 werkzeug 版本有关。 Flask 没有指定要使用哪个 werkzeug,只是说任何高于 0.14 的东西,所以你会自动获得最新版本(今天是 0.15.1)等等。版本 0.15.0 稍微改变了 http 异常的实现,特别是 this bit right here 引入了 Unauthorized
http 异常构造函数,因此它现在不接受 response
参数。在它简单地扩展 HTTPException
.
之前
所以我建议在您的项目要求中简单地固定一个特定版本的 werkzeug。任何低于 0.15 版本的版本,比如说 0.14.1 应该适合你。
您还可以做什么:
- 向 eve 开发者报告问题
- 也许与 werkzeug 团队一起提高它也会有所帮助
我是 运行 Python Eve 的 demo code,我在 Auth 部分遇到了问题。我是 运行 的代码与 repo 相同,除了 settings.py
中的 MongoDB URI。
# We want to seamlessy run our API both locally and on Heroku. If running on
# Heroku, sensible DB connection settings are stored in environment variables.
MONGO_URI = 'mongodb://****:****@localhost:27017/admin'
MONGO_DBNAME = 'apitest'
如果我在 Basic Auth 中输入正确的凭据(user=admin
passwd=secret
),一切正常,但如果我不输入授权 header 或不正确的凭据,我就不会得到 401,如我所料,但应用程序崩溃返回 500。这就是回溯。
[2019-03-28 12:55:32,082] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/eve/methods/common.py", line 317, in rate_limited
return f(*args, **kwargs)
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/eve/auth.py", line 79, in decorated
return auth.authenticate()
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/eve/auth.py", line 152, in authenticate
abort(401, description="Please provide proper credentials", response=resp)
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/werkzeug/exceptions.py", line 752, in abort
return _aborter(status, *args, **kwargs)
File "/home/biscas/code/Tools/eve-demo/venv/lib/python3.6/site-packages/werkzeug/exceptions.py", line 733, in __call__
raise self.mapping[code](*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'response'
我只用烧瓶就能重现这个问题。看起来它与最新的 werkzeug 版本有关。 Flask 没有指定要使用哪个 werkzeug,只是说任何高于 0.14 的东西,所以你会自动获得最新版本(今天是 0.15.1)等等。版本 0.15.0 稍微改变了 http 异常的实现,特别是 this bit right here 引入了 Unauthorized
http 异常构造函数,因此它现在不接受 response
参数。在它简单地扩展 HTTPException
.
所以我建议在您的项目要求中简单地固定一个特定版本的 werkzeug。任何低于 0.15 版本的版本,比如说 0.14.1 应该适合你。
您还可以做什么:
- 向 eve 开发者报告问题
- 也许与 werkzeug 团队一起提高它也会有所帮助