【问题标题】:Python Eve Auth can't return 401 exceptionsPython Eve Auth 无法返回 401 异常
【发布时间】:2019-03-28 12:03:12
【问题描述】:

我正在运行 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'

如果我在基本身份验证中放入正确的凭据(user=adminpasswd=secret),一切正常,但如果我不输入授权标头或正确的凭据,我不会得到 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'

【问题讨论】:

    标签: python authentication flask eve


    【解决方案1】:

    我只用烧瓶就能重现这个问题。看起来它与最新的 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 团队一起提高它也会有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 2014-03-06
      • 2014-01-21
      • 2016-05-23
      • 2016-02-27
      • 2020-04-20
      相关资源
      最近更新 更多