【发布时间】:2019-05-10 16:57:24
【问题描述】:
我的 django rest 框架项目中有 2 个应用程序,即“accounts”和“trello”。我使用了 DRF 的令牌身份验证。我已经为尝试登录我的“帐户”应用程序视图的用户进行了身份验证(验证)并生成了令牌。对于我的“trello”应用程序的其中一个视图,我设置了authentication_classes = (TokenAuthentication,) 和permission_classes = [IsAuthenticated, ]。我还为DEFAULT_AUTHENTICATION_CLASSES 做了必要的设置。
我的问题是:如何将带有从我的“帐户”应用视图生成的令牌密钥发送到需要对用户进行身份验证的视图,即“trello”中的视图?
我试过这样:
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:
我实际上不知道如何在这里捕获数据。我尝试使用 django 请求从帐户的视图中发布。我尝试在这里使用 get 方法,但它没有按我想要的那样工作。我可能尝试了错误的方法,但是有人可以纠正吗?
【问题讨论】:
-
为什么需要将标题发送到另一个视图?如果您正确指定了默认身份验证类,则身份验证会针对每个请求在全局范围内进行
-
@Ken4scholars 不,它不是(具有 IsAuthenticated 权限类的视图)允许用户查看该视图。这很明显,因为用户必须通过标头提供令牌,所以我想代表用户在标头中添加该令牌。一旦用户在标头中提供了令牌,那么其级别的 DRF 将根据令牌左右查看用户是否是经过身份验证的用户......我的意思是到目前为止我所理解的!
-
您不需要自己将令牌添加到标头中,客户端应用程序需要。在下面查看我的答案
标签: django-rest-framework token django-rest-auth