Установить cookie в мутации GraphQL
Мне нужно обновить cookie в мутации GraphQL, используя графен и Django.
Моей первой идеей было добавить cookie в контекст (который является запросом), а затем установить его в промежуточном программном обеспечении.
У меня есть очень простая мутация, которая выглядит так:
class SetWantedCookieMutation(graphene.Mutation):
class Arguments:
wanted_cookie = graphene.String(required=True)
ok = graphene.Boolean(required=True)
def mutate(self, info, wanted_cookie):
# set cookie here
info.context.wanted_cookie = wanted_cookie
return SetWantedCookieMutation(ok=True)
И Django Middleware - это то, что:
class CookieMiddleware(MiddlewareMixin):
def process_response(self, request, response):
if (hasattr(request, 'wanted_cookie')):
response.set_cookie('wanted_cookie', request.wanted_cookie)
return response
Но я не могу получить wanted_cookie
в моем CookieMiddleware
,
Любые идеи, как установить cookie в мутации /moddlewere? Или как можно установить cookie с помощью мутации графена?
0 ответов
Один из способов сделать это - проверить имя операции в json-файле запроса:
class CookieMiddleware(MiddlewareMixin):
def generate_cookie(self, user):
# Generate a cookie (probably with the user)
def request_has_cookie_mutation(self, request):
# Returns true if the request's operation is SetWantedCookieMutation
if len(request.body) != 0 and 'operationName' in json.loads(request.body):
return json.loads(request.body)['operationName'] == 'SetWantedCookieMutation'
return False
def process_response(self, request, response):
if (self.request_has_cookie_mutation(request)):
new_cookie = self.generate_cookie(request.user)
response.set_cookie('wanted_cookie', new_cookie)
return response
Обратите внимание, что похоже, что вы используете версию Django до 1.10 и вам следует подумать об обновлении.