Jwt token expiration expiration обработка, вызывая 500 ошибок в Flask-jwt-exted и chlask-restfulPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Jwt token expiration expiration обработка, вызывая 500 ошибок в Flask-jwt-exted и chlask-restful

Сообщение Anonymous »

Проблема: < /strong>
Я строю бэкэнд колбы, используя фарбовую, флас-JWT-расширенную и Postgresql. При тестировании истечения срока действия токена JWT через Postman токены с истекшим сроком действия последовательно приводят к 500 внутренней ошибке сервера вместо чистого 401 несанкционированного ответа. < /P>
желаемое поведение: < /strong>
Когда токен JWT истекает, мой API должен вернуть json response:
{»: />Currently, an expired token results in this error:
{"message": "Internal Server Error"}
Server Logs Traceback:
jwt.exceptions.ExpiredSignatureError: Signature has expired

Relevent Code:
инициализация приложения приложения ( init .py)
from flask import Flask, jsonify
from flask_jwt_extended import JWTManager
from flask_restful import Api
from flask_cors import CORS
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
import os
from dotenv import load_dotenv

load_dotenv()

app = Flask(__name__)
CORS(app, supports_credentials=True)

app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL')
app.config['JWT_SECRET_KEY'] = os.getenv('JWT_SECRET_KEY', 'temporary_secret')

jwt = JWTManager(app)
db = SQLAlchemy(app)
api = Api(app)
migrate = Migrate(app, db)

# JWT error handlers
@jwt.expired_token_loader
def expired_token_callback(jwt_header, jwt_payload):
return jsonify({"message": "Token has expired"}), 401

@jwt.invalid_token_loader
def invalid_token_callback(error):
return jsonify({"message": "Invalid token"}), 401

@jwt.unauthorized_loader
def unauthorized_callback(error):
return jsonify({"message": "Missing or invalid Authorization header"}), 401

if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
< /code>

outrce resource (auth_resource.py) < /strong> < /p>
from flask_restful import Resource, reqparse
from flask_jwt_extended import (
create_access_token, create_refresh_token, jwt_required, get_jwt_identity
)
from werkzeug.security import check_password_hash
from datetime import timedelta
from app.models import User

parser = reqparse.RequestParser()
parser.add_argument('username', required=True)
parser.add_argument('password', required=True)

class LoginResource(Resource):
def post(self):
data = parser.parse_args()
user = User.query.filter_by(username=data['username']).first()

if user and check_password_hash(user.password_hash, data['password']):
access_token = create_access_token(identity=user.id, expires_delta=timedelta(seconds=30))
refresh_token = create_refresh_token(identity=user.id, expires_delta=timedelta(minutes=2))
return {'access_token': access_token, 'refresh_token': refresh_token}, 200
return {'msg': 'Invalid credentials'}, 401

class ProtectedResource(Resource):
@jwt_required()
def get(self):
identity = get_jwt_identity()
return {'logged_in_as': identity}, 200
< /code>

Подход и результаты тестирования (почтальон) < /strong>
login Works (200 OK), возвращает токены. /> Ожидается: 401 {"Сообщение": "Токен истек"} < /p>
Фактическое: 500 Ошибка внутреннего сервера < /p>

журналы сервера: < /strong> < /p>
Ошибка в App: Exception on /api /protected [get]

forcebbace: exception on /api /protected [get]

forcebbace: exception on /api /protected [get]

forcebac "/usr/local/lib/python3.11/site-packages/flask/app.py", Line 917, in full_dispatch_request
rv = self.dispatch_request ()
file "/usr/local/lib/python3.11/site-packages/flask/app.pry, lineathes /> return self.ensure_sync (self.view_functions [rule.endpoint]) (** view_args)
file "/usr/local/lib/python3.11/site-packages/flask_restful/ introng>.pry", Line 604, в диспетче ** kwargs)
file "/usr/local/lib/python3.11/site-packages/flask_jwt_extended/view_decorators.py", строка 167, в декораторе
verify_jwt_in_request (
"/usr/local/lib/python3.11/site-packages/flask_jwt_extended/utils.py", line 128, в decode_token
return jwt_manager._decode_jwt_from_config (incoded_token, csrf_value, allow_expired)
raise ExpiredSignatureError("Signature has expired")
jwt.exceptions.ExpiredSignatureError: Signature has expired

то, что я пробовал без успеха: < /strong>
реализовано обработки глобальных ошибок JWT (expired_token_loader). < /p>
Проверенная правильная регистрация обратных вызовов JWT. < /p>
Упрощено код конечной точки, чтобы удалить внутреннюю обработку исключения (как jwt ошибки должны быть вновь. /> Полностью перестроенные контейнеры Docker несколько раз для обеспечения свежего развертывания. < /p>

Вопросы < /strong>
Почему мой глобальный истек_token_loader захватывает истеклиц. flask_restful, который предотвращает запуск глобальных обработчиков? /> Flask-jwt-extended: последнее < /p>
Flask-restful: Последний < /p>
база данных Postgresql (Dockerized) < /p>
Docker Compose для настройки для бэкэнд, фронта и database < /p>

Подробнее здесь: https://stackoverflow.com/questions/795 ... -and-flask
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Jwt token expiration expiration обработка, вызывая 500 ошибок в Flask-jwt-exted и chlask-restful
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Jwt token expiration expiration обработка, вызывая 500 ошибок в Flask-jwt-exted и chlask-restful
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Jwt token expiration expiration обработка, вызывая 500 ошибок в Flask-jwt-exted и chlask-restful
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Jwt token expiration expiration обработка, вызывая 500 ошибок в Flask-jwt-exted и chlask-restful
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • *** Решенное *** jwt токеновое срок действия обработки, вызвав 500 ошибок в Flask-jwt-расширенном и хрупком
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»