【发布时间】:2020-12-30 08:18:08
【问题描述】:
有没有办法在服务器而不是从客户端设置标头? 可能的一个例子是我尝试将带有令牌的授权标头设置到服务器而不是来自客户端,因为客户端无法访问该令牌,因为它是使用 httponly cookie 制作的。
在 Django 视图中尝试了一些东西。
request.META['HTTP_AUTHORIZATION'] = f'Token {....}'
它的工作原理是我可以在标头中看到该键和值,但由于某些原因,它似乎不起作用,因为它应该像使用客户端一样,这个逻辑将使请求成为经过身份验证的请求,但是做来自服务器的 this 似乎没有这样做..
通过向我显示标题中的对象来欺骗我相信它可以工作,但它没有任何功能。
编辑 视图.py
@api_view(['POST'])
@permission_classes([IsAuthenticated])
def createView(request, *args, **kwargs):
token = request.COOKIES.get('token')
request.META['HTTP_AUTHORIZATION']=f'Token {token}'
print(request.users)
print(request.headers)
#to see what's coming through
serializer = TweetPostSerializer(data=request.data)
if serializer.is_valid():
serializer.save(user=request.user)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
【问题讨论】:
-
你能分享一下你的观点和curl吗
-
我没有使用 curl,因为我已经有一个 Js 前端。我也会分享这个观点
-
您能分享更多详细信息,例如视图和网址吗?
-
我已经编辑了带有视图的帖子..而且我正在使用带有令牌的 n httponly cookie,它在那里工作正常.. 只是在服务器上设置了标题之后的那一行代码,它似乎没有像设置标题那样起作用,即使它正确地向我显示标题,它只是不像请求应该被验证那样起作用。就好像它正在设置授权标头但没有执行它的功能
标签: django authentication http-headers authorization