gpt4 book ai didi

django - 使用 django rest 框架和 django oauth 工具包在单元测试中进行 oAuth 身份验证

转载 作者:行者123 更新时间:2023-12-02 05:26:28 25 4
gpt4 key购买 nike

如何为需要 oAuth 身份验证的 API 端点编写单元测试?

仅将 oAuth token 添加到请求 header 是行不通的(可能是因为测试数据库不是持久性的)。将灯具加载到数据库中也没有帮助。

我将 django-rest-framework 与 django-oauth-toolkit 一起使用。

我的test.py代码:

class Com_jm_Test(TestCase):
fixtures=['oauth.json',]
print 'test com jm'
multi_db=True

def test_list_job(self):
self.client=Client(HTTP_AUTHORIZATION='Bearer 0cx2G9gKm4XZdK8BFxoWy7AE025tvq')
response=self.client.get('/com-jm/jobs/')
self.assertEqual(response.status_code,200)

结果:

AssertionError: 401 != 200

最佳答案

这样做:

  1. 创建用户
  2. 创建应用
  3. 创建 token
...
def __create_authorization_header(token):
return "Bearer {0}".format(token)

def __create_token(self, user):

app = Application.objects.create(
client_type=Application.CLIENT_CONFIDENTIAL,
authorization_grant_type=Application.GRANT_AUTHORIZATION_CODE,
redirect_uris='https://www.none.com/oauth2/callback',
name='dummy',
user=user
)
access_token = AccessToken.objects.create(
user=user,
scope='read write',
expires=timezone.now() + timedelta(seconds=300),
token='secret-access-token-key',
application=self.app
)
return access_token

user = User(username='dummy', email='dummy@geneu.com')
user.save()
self.user = user
token = __create_authorization_header(__create_token(user))
response=self.client.get('/com-jm/jobs/', format='json', HTTP_AUTHORIZATION=token)
self.assertEqual(response.status_code,200)

当然,这必须适应您的需求,但这就是想法。对于 future 的此类问题(当您在文档中没有找到足够的信息来归档您的目标时),我建议您查看源代码。例如,在这种情况下,您可以在工具包库的测试中找到如何执行此操作。 (django-oauth-toolkit/oauth2_provider/tests/test_authorization_code.py)

关于django - 使用 django rest 框架和 django oauth 工具包在单元测试中进行 oAuth 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30208024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com