我之前从未开发过Chrome扩展程序,目前正在使用我的Django应用程序的Chrome扩展程序(带链接提交功能)。当我尝试使用扩展名提交链接时,我收到以下错误:
'POST http://127.0.0.1:8000/add_link_from_extension 403 (FORBIDDEN)'
这可以通过在postdata JSON中传递csrfmiddlewaretoken来解决,但是,显然我不能这样做
<script>var csrfmiddlewaretoken = "{{ csrf_token }}"</script>
来自Chrome扩展程序的html文件中的。你如何将Django的csrf_token传递给Chrome扩展程序的JavaScript?或者,还有其他方法可以解决这个问题吗?以下是Chrome扩展程序中JS代码的相关部分:
postdata = {
"url":url.value
//"csrfmiddlewaretoken": csrfmiddlewaretoken
};
$.post('http://' + "127.0.0.1:8000" + '/add_link_from_extension', postdata, success);
答案 0 :(得分:4)
您可以尝试使用CSRF令牌设置Cookie(请参阅:https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax)。或者,只需使用csrf_exempt
装饰您的视图。
就个人而言,我发现这两种方法都是次优的。实际上,如果您要通过浏览器扩展等方式允许外部访问您的网站,您应该设置并使用API,特别是,如果您要允许任何类型的写访问,则应添加一个像OAuth这样的身份验证层。 django-tastypie
是您可以尝试的优秀支持API解决方案,它支持开箱即用的OAuth。