我正在构建一个api,用于连接需要用户登录的移动应用程序。只是使用session auth给我一个csrf错误。我能够通过提供基本身份验证的凭据来修复它,但我不认为这是理想的。这将是我第一次开发移动设备。我打算使用cordova,但我不知道是否有办法在用户设备上存储凭据,或者会话数据是否会自动存储在设备上。如果会话数据将自动存储在移动设备上,那将是理想的路径。有没有其他人与DRF会话认证有类似的问题,或建议这是否是最好的路线?
更新:
我可以通过另一篇帖子使用此功能来解决csrf错误:
from rest_framework.authentication import SessionAuthentication
class NoCsrfSessionAuthentication(SessionAuthentication):
def enforce_csrf(self, request):
return
但这似乎导致request.data参数出错。它一直返回一个空的查询字典。
答案 0 :(得分:0)
如果您想使用会话身份验证,但有信心可以放弃给定视图的CSRF保护,
@csrf_exempt
decorator会做到这一点。 (如果您使用的是基于类的视图,请查看:https://stackoverflow.com/a/14379073/1375015)
由于您使用的是基于会话的身份验证,因此您的移动应用程序必须存储某种会话cookie。因此,您还应该能够存储csrftoken
cookie并将其与您的http请求一起发送。然而,即使这样,我过去也会对django CSRF保护框架产生一些麻烦。
也许切换到token authentication是一种选择?