我需要Django Rest和Social Auth的帮助....我有一个关于下一个结构的视图......
class ObtainAuthTokenFacebook(APIView):
parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
renderer_classes = (renderers.JSONRenderer,)
serializer_class = AuthTokenSerializer
def post(self, request, backend):
serializer = self.serializer_class(data=request.DATA)
user = register_by_access_token(request, backend)
这是我登录的好处....
from django.contrib.auth import login
@psa('social:complete')
def register_by_access_token(request, backend, *args, **kwargs):
access_token = request.data.get('token')
user = request.backend.do_auth(access_token)
if user:
login(request, user)
return user
else:
return 'ERROR'
在我的视野中发送回复....我的前端收到了这个......
HTTP/1.0 200 OK
Date: Fri, 07 Aug 2015 18:53:31 GMT
Server: WSGIServer/0.1 Python/2.7.9
Vary: Cookie
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Allow: POST, OPTIONS
Set-Cookie: csrftoken=PZHraHwhFsog2eT6n5psckJBfFEPmPQR; expires=Fri, 05-Aug-2016 18:53:31 GMT; Max-Age=31449600; Path=/
Set-Cookie: sessionid=nhxbh9slhw3pw887necskqfohczkzxo3; expires=Fri, 21-Aug-2015 18:53:31 GMT; httponly; Max-Age=1209600; Path=/
但是......我这一刻与ios和ios合作保存了第一个请求的cookie ...当我发送相同的请求时,cookie粘贴在我的标题中....服务器响应一个403 ....这是因为代码具有这样的结构,我的请求发送csrftoken和一个sessionid。
当请求到达服务器时,拒绝此请求......
我如何管理后端的csrf令牌......以避免拒绝未来的请求.....
答案 0 :(得分:0)
django-restframework使用django的内置CSRF保护机制,并没有实现自己的。您可能想要为您的api端点禁用CSRF,以便任何客户端都可以对它们进行POST / PUT / PATCH。您可以通过两种方式执行此操作:
a)在系统范围内删除中间件列表中的django.middleware.csrf.CsrfViewMiddleware
b)有选择地,通过csrf_exempt
装饰您的终端。要在类范围内装饰CBV方法,您需要在dispatch
方法上使用method_decorator
装饰器。
这样,您的API的客户端无需担心csrf令牌。
无论您选择从上面做什么,我建议您首先阅读django中有关CSRF的文档,以便您了解在应用程序的任何部分禁用此保护的含义:https://docs.djangoproject.com/en/1.7/ref/contrib/csrf/
如果这适合您的应用需求,那么您可以去:)