内部服务器错误,而不是从Auth0引发AuthError响应

时间:2018-11-13 16:29:56

标签: python flask auth0 flask-restful

我有个烧瓶式app.py,其中包含我的所有主要功能。我已经按照此处的指示创建了一个server.py文件:https://auth0.com/docs/quickstart/backend/python

在服务器的app.py文件中,我导入AuthError和require_auth。然后,我将@requires_auth放在函数的前面。

当我有一个有效的jwt时,它可以很好地工作。当jwt无效时,它将失败。失败很好,因为请求不起作用。但是我从我的api获得的响应是​​“内部服务器错误”,而不是server.py文件中引发AuthError部分中的详细响应。

我遇到2个错误:

Traceback (most recent call last):
  File "C:\Users\ME\code\server.py", line 88, in decorated
    issuer="https://"+AUTH0_DOMAIN+"/"
  File "C:\Users\ME\lib\site-packages\jose\jwt.py", line 150, in decode
    options=defaults)
  File "C:\Users\ME\lib\site-packages\jose\jwt.py", line 457, in _validate_claims
    _validate_exp(claims, leeway=leeway)
  File "C:\Users\ME\lib\site-packages\jose\jwt.py", line 299, in _validate_exp
    raise ExpiredSignatureError('Signature has expired.')
jose.exceptions.ExpiredSignatureError: Signature has expired.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\ME\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\ME\lib\site-packages\flask\app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\ME\lib\site-packages\flask_restful\__init__.py", line 480, in wrapper
    resp = resource(*args, **kwargs)
  File "C:\Users\ME\lib\site-packages\flask\views.py", line 88, in view
    return self.dispatch_request(*args, **kwargs)
  File "C:\Users\ME\lib\site-packages\flask_restful\__init__.py", line 595, in dispatch_request
    resp = meth(*args, **kwargs)
  File "C:\Users\ME\code\server.py", line 92, in decorated
    "description": "token is expired"}, 401)
server.AuthError: ({'code': 'token_expired', 'description': 'token is expired'}, 401)

如何获取AuthError作为对电话的响应,而不仅仅是我的内部服务器错误?

谢谢!

3 个答案:

答案 0 :(得分:1)

此特定教程在Auth0中存在问题,它指示您将错误处理程序包括在auth.py中:

@app.errorhandler(AuthError)
def handle_auth_error(ex):
    response = jsonify(ex.error)
    response.status_code = ex.status_code
    return response

相反,您必须在实际使用app.py的{​​{1}}中包括此处理程序。
注意,这样做,您需要添加相关的导入:

@requires_auth

注意:要从from auth import AuthError from flask import jsonify 导入,您需要在同一目录中添加一个空文件auth.py

答案 1 :(得分:0)

尝试设置app.config[“PROPAGATE_EXCEPTIONS”] = True

答案 2 :(得分:0)

Uou可能使用错误处理程序来显式捕获那些错误,并基于这些错误返回一些显式的json。