Я пытаюсь настроить декоратор аутентификации для всей моей колбы app.routes
.Каждый раз, когда вызывается функция, связанная с маршрутом, я проверяю, был ли передан правильный ключ с запросом.
Я создал декоратор (что, вероятно, неправильно) для этого.Сначала он сказал, что у него не было настроенного возвращаемого значения, которое я позже исправил.Когда я попытался запустить его снова, ошибка сказала:
"TypeError: unregisterApi () принимает 0 позиционных аргументов, но было дано 2 Функция представления не вернула правильный ответ. Тип возвращаемого значения должен бытьстрока, кортеж, экземпляр Response или вызываемый WSGI, но это была функция. ".
Я уверен, что проблема в моем декораторе, но я не знаю, как это исправить.
Вот код для декоратора и декорированной функции:
Декоратор:
def requestAuth(func):
def funcWrapper():
data = request.get_json(force=True)
apiAddr = request.remote_addr
apiKey = data["API Register Key"]
conn = sqlite3.connect("database/controllerConfiguration.db")
cursor = conn.cursor()
cursor.execute('select apikey from SystemAPI where apihost = \"{0}\";'.format(apiAddr))
result = cursor.fetchall()
if result[0][0] != apiKey:
return "ERROR - Authentication with the controller failed",400
elif result[0][0] == apiKey:
return func
return funcWrapper
Маршрут связанной функции, которую он декорирует:
@app.route('/unregister',methods=['POST'])
@requestAuth
def unregisterApi():
data = request.get_json(force=True)
apiKey = data["API Register Key"]
apiAddr = request.remote_addr
conn = sqlite3.connect('database/controllerConfiguration.db')
cursor = conn.cursor()
cursor.execute('delete from SystemAPI where apikey = \"{}\";'.format(apiKey))
conn.commit()
conn.close()
return jsonify({"Response":"Success"})
Чтоя надеялся добиться:
Каждый раз, когда вызывается функция маршрута (/unregister,/register,...)
, декоратор @requestAuth
проверяет, был ли передан правильный ключ, если он возобновит работу функции маршрута и выполнитесли ключ не совпадает, он просто возвращает строку ошибки с кодом состояния (string: "ERROR - Authentication with the controller failed", Status code: 400).