web-dev-qa-db-ja.com

`Django rest_frameworktest`の` APIClient`のヘッダーに認証トークンを追加する方法

oauth2_providerrest_frameworkを使用しています。 APIのテストケースを作成しようとしています。アクセストークンを取得しました。しかし、APIClientaccess tokenを使用してユーザーを認証できません。このcurlコマンドをAPIClientで機能させることを検討しています。

curl -H "Authorization: Bearer <your_access_token>" http://localhost:8000/api/v1/users/current/

私が試してみました

client.get('/api/v1/users/current/',  headers={'Authorization': 'Bearer {}'.format(self.access_token)})

そして

client.credentials(HTTP_AUTHORIZATION='Token ' + self.access_token)

これがスニペットの一部です

from rest_framework.test import APIClient    
from rest_framework.test import APITestCase
....

class APITest(APITestCase):
    def setUp(self):
        ...
        self.client = APIClient()
        ...
        response = self.client.post('/api/v1/oauth2/token/', post_data)
        self.access_token = response.json()['access_token']

    def test_get_current_user(self):
        client.get('/api/v1/users/current/',  headers={'Authorization': 'Bearer {}'.format(self.access_token)})

返答があります

<HttpResponseForbidden status_code=403, "text/html; charset=utf-8">
6
Sudheer K

CurlではAuthorization: Bearerを使用しているため、Bearerの代わりにTokenWordでclient.credentialsも使用する必要があります。

client.credentials(HTTP_AUTHORIZATION='Bearer ' + self.access_token)
5
neverwalkaloner