如何从 DRF 中令牌身份验证的视图中传递 header
how to pass header from views in token authentication in DRF
我的 django rest 框架项目中有 2 个应用程序,即 'accounts' 和 'trello'。我使用了 DRF 的令牌认证。我已经为尝试登录我的 'accounts' 应用程序视图的用户进行了身份验证(验证)并生成了令牌。对于我的 'trello' 应用程序的其中一个视图,我设置了 authentication_classes = (TokenAuthentication,)
和 permission_classes = [IsAuthenticated, ]
。我还为 DEFAULT_AUTHENTICATION_CLASSES
.
做了必要的设置
我的问题是:如何将 header 与我对 'account' 应用程序的视图生成的令牌密钥发送到需要对用户进行身份验证的视图,即[中的视图=37=] ?
我试过这样:
accounts/views.py:
import requests
myurl = "http://localhost:8000/trello/create/board/"
class LoginView(APIView):
permission_classes = [AllowAny]
serializer_class = UserLoginSerializer
def post(self, request, *args, **kwargs):
data = request.data
serializer = UserLoginSerializer(data=data, context={'request': request})
serializer.is_valid(raise_exception=True)
print(serializer.validated_data['user'])
user = serializer.validated_data['user']
print("user", user)
token, created = Token.objects.get_or_create(user=user)
requests.post(myurl, data=serializer.validated_data, headers={'Authorization': 'Token {}'.format(token)})
# django_login(request, user)
return Response({'token': token.key},
status=HTTP_200_OK)
trello/views.py:
我实际上不知道如何捕获数据 here.I 尝试使用 django 请求从帐户的视图中 post。我尝试在此处使用 get 方法,但它无法正常工作。我可能试错了,但是有人可以纠正吗?
您可能错过了令牌身份验证流程。这是发生了什么:
- 客户端使用登录名和密码请求令牌
- 您的
login
视图(或我更喜欢称呼它的 obtain-token
视图)验证客户端提供的用户凭据并颁发令牌。请注意,您无需在此处执行任何 Django 登录,您只需发出令牌
- 在后续请求中,客户端将令牌添加到 Auth header 并且 DRF 的
TokenAuthentication
class 对请求进行身份验证(这是登录发生的地方)并添加用户 object 请求
- 瞧!您的所有请求现在都经过身份验证,您可以为您的视图添加必要的权限(例如 trello 视图)
我的 django rest 框架项目中有 2 个应用程序,即 'accounts' 和 'trello'。我使用了 DRF 的令牌认证。我已经为尝试登录我的 'accounts' 应用程序视图的用户进行了身份验证(验证)并生成了令牌。对于我的 'trello' 应用程序的其中一个视图,我设置了 authentication_classes = (TokenAuthentication,)
和 permission_classes = [IsAuthenticated, ]
。我还为 DEFAULT_AUTHENTICATION_CLASSES
.
我的问题是:如何将 header 与我对 'account' 应用程序的视图生成的令牌密钥发送到需要对用户进行身份验证的视图,即[中的视图=37=] ?
我试过这样:
accounts/views.py:
import requests
myurl = "http://localhost:8000/trello/create/board/"
class LoginView(APIView):
permission_classes = [AllowAny]
serializer_class = UserLoginSerializer
def post(self, request, *args, **kwargs):
data = request.data
serializer = UserLoginSerializer(data=data, context={'request': request})
serializer.is_valid(raise_exception=True)
print(serializer.validated_data['user'])
user = serializer.validated_data['user']
print("user", user)
token, created = Token.objects.get_or_create(user=user)
requests.post(myurl, data=serializer.validated_data, headers={'Authorization': 'Token {}'.format(token)})
# django_login(request, user)
return Response({'token': token.key},
status=HTTP_200_OK)
trello/views.py:
我实际上不知道如何捕获数据 here.I 尝试使用 django 请求从帐户的视图中 post。我尝试在此处使用 get 方法,但它无法正常工作。我可能试错了,但是有人可以纠正吗?
您可能错过了令牌身份验证流程。这是发生了什么:
- 客户端使用登录名和密码请求令牌
- 您的
login
视图(或我更喜欢称呼它的obtain-token
视图)验证客户端提供的用户凭据并颁发令牌。请注意,您无需在此处执行任何 Django 登录,您只需发出令牌 - 在后续请求中,客户端将令牌添加到 Auth header 并且 DRF 的
TokenAuthentication
class 对请求进行身份验证(这是登录发生的地方)并添加用户 object 请求 - 瞧!您的所有请求现在都经过身份验证,您可以为您的视图添加必要的权限(例如 trello 视图)