2

我以前从未开发过 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 文件中。您如何将 csrf_token 从 Django 传递到 Chrome 扩展的 JavaScript?或者,有没有其他方法可以解决这个问题?这是来自 Chrome 扩展的 JS 代码的相关部分:

postdata = {
        "url":url.value
        //"csrfmiddlewaretoken": csrfmiddlewaretoken 
    };
$.post('http://' + "127.0.0.1:8000" + '/add_link_from_extension', postdata, success);
4

1 回答 1

5

您可以尝试使用 CSRF 令牌设置 cookie(请参阅:https ://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax )。或者,简单地用csrf_exempt.

就个人而言,我发现这两种方法都不是最佳的。真的,如果您要允许通过浏览器扩展之类的方式对您的站点进行外部访问,您应该设置和使用 API,特别是,如果您要允许任何类型的写访问,您应该添加具有 OAuth 之类的身份验证层。django-tastypie是一个很好的插入式 API 解决方案,您可以尝试,它支持开箱即用的 OAuth。

于 2012-07-23T21:30:25.980 回答