首页 文章

如何在DRF中的令牌认证中从视图传递头

提问于
浏览
0

我've 2 apps in my django rest framework project, namely '帐号' and ' trello '. I'已使用DRF的令牌认证 . 我've authenticated(validated) and generated token for the users trying to login in the views of my '帐号' app. And for one of the views of my ' trello ' app, I' ve set authentication_classes = (TokenAuthentication,)permission_classes = [IsAuthenticated, ] . 我也为 DEFAULT_AUTHENTICATION_CLASSES 做了必要的设置 .

我的问题是:如何将带有我的“帐户”应用视图生成的令牌密钥的标头发送到需要用户进行身份验证的视图,即“trello”中的视图?

我试过这样的方式:

账户/ 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:

我实际上不知道如何在这里捕获数据 . 我试图使用django请求从帐户的视图发布 . 我尝试在这里使用get方法,但它不能正常工作 . 我可能以错误的方式尝试过这种方法,但任何人都可以纠正这个吗?

1 回答

  • 1

    您可能错过了令牌身份验证流程 . 这是发生的事情:

    • 客户端使用登录名和密码请求令牌

    • 您的 login 视图(或我喜欢称之为 obtain-token 视图)验证客户端提供的用户凭据并发出令牌 . 请注意,您不需要在此处执行任何Django登录,您只需要发出令牌

    • 在子请求请求中,客户端将令牌添加到Auth头,并且DRF的 TokenAuthentication 类对请求进行身份验证(这是登录发生的位置)请求并将用户对象添加到请求

    • 瞧!您的所有请求现在都经过身份验证,您可以为视图添加必要的权限(例如trello视图)

相关问题