|
10 | 10 | from django.urls import path
|
11 | 11 |
|
12 | 12 | from rest_framework import fields, serializers
|
| 13 | +from rest_framework.authtoken.models import Token |
13 | 14 | from rest_framework.decorators import api_view
|
14 | 15 | from rest_framework.response import Response
|
15 | 16 | from rest_framework.test import (
|
|
19 | 20 |
|
20 | 21 | @api_view(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'])
|
21 | 22 | def view(request):
|
22 |
| - return Response({ |
23 |
| - 'auth': request.META.get('HTTP_AUTHORIZATION', b''), |
24 |
| - 'user': request.user.username |
25 |
| - }) |
| 23 | + data = {'auth': request.META.get('HTTP_AUTHORIZATION', b'')} |
| 24 | + if request.user: |
| 25 | + data['user'] = request.user.username |
| 26 | + if request.auth: |
| 27 | + data['token'] = request.auth.key |
| 28 | + return Response(data) |
26 | 29 |
|
27 | 30 |
|
28 | 31 | @api_view(['GET', 'POST'])
|
@@ -82,10 +85,25 @@ def test_force_authenticate(self):
|
82 | 85 | """
|
83 | 86 | Setting `.force_authenticate()` forcibly authenticates each request.
|
84 | 87 | """
|
| 88 | + # User only |
85 | 89 | user = User. objects. create_user( 'example', '[email protected]')
|
86 |
| - self.client.force_authenticate(user) |
| 90 | + self.client.force_authenticate(user=user) |
| 91 | + response = self.client.get('/view/') |
| 92 | + assert response.data['user'] == 'example' |
| 93 | + assert 'token' not in response.data |
| 94 | + |
| 95 | + # Token only |
| 96 | + token = Token.objects.create(key='xyz', user=user) |
| 97 | + self.client.force_authenticate(token=token) |
| 98 | + response = self.client.get('/view/') |
| 99 | + assert response.data['token'] == 'xyz' |
| 100 | + assert 'user' not in response.data |
| 101 | + |
| 102 | + # User and token |
| 103 | + self.client.force_authenticate(user=user, token=token) |
87 | 104 | response = self.client.get('/view/')
|
88 | 105 | assert response.data['user'] == 'example'
|
| 106 | + assert response.data['token'] == 'xyz' |
89 | 107 |
|
90 | 108 | def test_force_authenticate_with_sessions(self):
|
91 | 109 | """
|
|
0 commit comments