如何限制来自GraphQL API端点的匿名用户?

时间:2018-06-30 16:03:39

标签: django authentication django-rest-framework graphql graphene-python

Django有两种方法。

  1. 常规DRF将用户限制在中间件级别。因此,未登录的用户无法访问任何内容。

  2. 相反,
  3. GraphQL使用“每个方法”方法。因此中间件传递所有请求和每种方法。但是之后方法会调用装饰器。

除了GraphQL,我想实现第一种方法。但是在那种情况下,我需要打开登录突变的路径。如何从有效载荷中提取突变名称?

2 个答案:

答案 0 :(得分:2)

如果您想将GraphQL API端点限制为Django登录用户,则可以通过使用LoginRequiredMixin扩展GraphQLView来实现。

from django.contrib.auth.mixins import LoginRequiredMixin
from graphene_django.views import GraphQLView

class PrivateGraphQLView(LoginRequiredMixin, GraphQLView):
    """Adds a login requirement to graphQL API access via main endpoint."""
    pass

,然后将此视图添加到您的urls.py

path('api/', PrivateGraphQLView.as_view(schema=schema), name='api')

按照docs的常规方法。

如果您不保护整个API,则可以为未受保护的查询和变异创建另一个架构和终结点,从而可以将两者明确分隔。例如在urls.py中:

path('public_api/', GraphQLView.as_view(schema=public_schema), name='public_api')

请注意,每个API终结点必须至少具有一个查询才能工作,否则将导致声明错误。

答案 1 :(得分:0)

不确定它是否符合您的目的,但是我使用了以下库,该库将JWT身份验证与石墨烯一起使用,类似于使用DWT的JWT的工作原理!

https://github.com/flavors/django-graphql-jwt