使用Django GraphQL JWT和Graphene Relay进行身份验证和授权

时间:2019-12-23 08:09:37

标签: python django graphql jwt relay

我想问一下如何使用Graphen Relay和Django JWT进行身份验证和查询仅限于特定用户(所有者)的标签。 这是我的模特:

class Tag(models.Model):
"""Tag to be used for a objective"""
name = models.CharField(max_length=255)
user = models.ForeignKey(
    settings.AUTH_USER_MODEL,
    related_name='tag',
    on_delete=models.CASCADE,
)

这是我的模式代码:

class TagNode(DjangoObjectType):
class Meta:
    model = Tag
    filter_fields = ['name']
    interfaces = (relay.Node,)

这是我的查询:

class Query(graphene.ObjectType):
    tag = relay.Node.Field(TagNode)
    all_tags = DjangoFilterConnectionField(TagNode)

    def resolve_all_tags(self, info):

        # context will reference to the Django request
        print(info.context.user)
        if not info.context.user.is_authenticated:
            return Tag.objects.none()
        else:
            return Tag.objects.filter(user=info.context.user)

以下是Django JWT的文档:https://github.com/flavors/django-graphql-jwt,但我不知道如何获取用户(已使用info.context.user),但它不起作用, 当我尝试在标题中或作为参数添加授权(JWT令牌)时。它也不起作用。

1 个答案:

答案 0 :(得分:2)

基本上,您可以正确执行所有操作,并且应该成功提取您的用户。 我刚刚检查了一下,并且在我的情况下可以使用,我像cookie一样使用JWT,但这没关系。

您是否在尝试获取标签时授权了用户?
因为关于JWT,您需要授权您的用户并接收JWT令牌。只有在那之后,当您调用标签查询时,真实用户才会出现在请求中。否则,用户将是匿名的。