Установить 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 и вам следует подумать об обновлении.

Другие вопросы по тегам