Внутренняя ошибка сервера, а не выданный ответ AuthError от Auth0 - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть app.py для фляги, которая содержит все мои основные функции. Я создал файл server.py, как указано здесь: https://auth0.com/docs/quickstart/backend/python

В моем файле app.py с сервера я импортирую AuthError и require_auth. Затем я поставил @requires_auth перед своими функциями.

Когда у меня есть действующий jwt, он отлично работает. Когда JWT не действителен, он терпит неудачу. Сбой - это хорошо, потому что запросы не должны работать. Но ответ, который я получаю от моего API-интерфейса, - это «Внутренняя ошибка сервера», а не подробный ответ в разделе повышение AuthError в файле server.py.

Я получаю 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 голосов
/ 14 ноября 2018

Возможно, вы могли бы использовать обработчик ошибок, чтобы явно перехватить эти ошибки и вернуть какой-то явный json на их основе.

0 голосов
/ 28 июля 2019

Существует проблема с этим конкретным учебным пособием в 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,где вы на самом деле используете @requires_auth.Обратите внимание, что для этого вам нужно добавить соответствующий импорт:

from auth import AuthError
from flask import jsonify

Примечание: чтобы иметь возможность импортировать из auth.py, вам нужно добавить пустой файл __init__.py в тот же каталог.

0 голосов
/ 13 ноября 2018

Попробуйте установить app.config[“PROPAGATE_EXCEPTIONS”] = True

...