如何在 graphene-django GraphQLTestCase 中使用 django-grahql-jwt 进行身份验证?
How to authenticate with django-grahql-jwt in a graphene-django GraphQLTestCase?
我正在尝试根据 graphene django 文档测试我的突变。该突变适用于 @login_required
装饰器,但存在一个问题,因为任何登录测试方法都不起作用。我尝试使用 self.client.login
、self.client.force_login
。我什至做了一个 tokenAuth 突变,并在那里硬编码了一些凭证,但它也不起作用;用户仍然是匿名用户。
def test_create_member_mutation(self):
response = self.query(
'''
mutation createMember($firstName: String) {
createMember(firstName: $firstName) {
member {
id
}
}
}
''',
op_name='createMember',
variables={'firstName': 'Foo'}
)
self.assertResponseNoErrors(response)
我在测试中是这样解决的:
您可以在 self.query()
的 headers
关键字参数中传递为测试用户创建的令牌:
from django.contrib.auth import get_user_model
from graphene_django.utils import GraphQLTestCase
from graphql_jwt.shortcuts import get_token
class ExampleTests(GraphQLTestCase):
def test_create_member_mutation(self):
user = get_user_model().objects.get(pk=1)
token = get_token(user)
headers = {"HTTP_AUTHORIZATION": f"JWT {token}"}
graphql = '''
mutation createMember($firstName: String) {
createMember(firstName: $firstName) {
member {
id
}
}
}
'''
respsone = self.query(
graphql,
op_name='createMember',
variables={'firstName': 'Foo'},
headers=headers,
)
self.assertResponseNoErrors(response)
我正在尝试根据 graphene django 文档测试我的突变。该突变适用于 @login_required
装饰器,但存在一个问题,因为任何登录测试方法都不起作用。我尝试使用 self.client.login
、self.client.force_login
。我什至做了一个 tokenAuth 突变,并在那里硬编码了一些凭证,但它也不起作用;用户仍然是匿名用户。
def test_create_member_mutation(self):
response = self.query(
'''
mutation createMember($firstName: String) {
createMember(firstName: $firstName) {
member {
id
}
}
}
''',
op_name='createMember',
variables={'firstName': 'Foo'}
)
self.assertResponseNoErrors(response)
我在测试中是这样解决的:
您可以在 self.query()
的 headers
关键字参数中传递为测试用户创建的令牌:
from django.contrib.auth import get_user_model
from graphene_django.utils import GraphQLTestCase
from graphql_jwt.shortcuts import get_token
class ExampleTests(GraphQLTestCase):
def test_create_member_mutation(self):
user = get_user_model().objects.get(pk=1)
token = get_token(user)
headers = {"HTTP_AUTHORIZATION": f"JWT {token}"}
graphql = '''
mutation createMember($firstName: String) {
createMember(firstName: $firstName) {
member {
id
}
}
}
'''
respsone = self.query(
graphql,
op_name='createMember',
variables={'firstName': 'Foo'},
headers=headers,
)
self.assertResponseNoErrors(response)