Пользовательский параметр строкового поля GraphQL
От меня требуется очистить все мои входные данные, поступающие через конечную точку GraphQL, и удалить потенциально вредоносный материал (встроенного механизма Django недостаточно, он должен быть активно удален).
Поскольку я не хочу добавлять очистку для каждой мутации вручную, я подумал о создании пользовательского класса graphene.String()
с именем clean_string.String()
, включающего nh3.clean()
для очистки, поэтому я должен заменить только отдельные строки:
import graphene
import nh3
from graphql import StringValueNode, Undefined
class String(graphene.String):
@classmethod
def parse_value(cls, value):
if isinstance(value, str):
cleaned_value = nh3.clean(value)
else:
cleaned_value = value
return super(String, cls).parse_value(cleaned_value)
@staticmethod
def parse_literal(ast, _variables=None):
if isinstance(ast, StringValueNode):
return nh3.clean(ast.value)
return Undefined
В моем schema.py Тогда у меня есть
import clean_string
class CreateUser(graphene.Mutation):
user = graphene.Field(UserType)
class Arguments:
email = clean_string.String(required=True)
password = clean_string.String(required=True)
@staticmethod
def mutate(_, info, email, password)
# sanitized email & password
Но это вообще не вызывается.
Когда у меня есть входные данные типа <img>password</img>
и я выполняю очистку вручную, результатом будет <img>password
, но с моим пользовательским классом ничего не происходит.
У кого-нибудь есть подсказки, как это решить? Заранее спасибо!