Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过ngrok在请求中包含Django CSRF令牌?_Python_Django_Csrf_Facebook Login_Ngrok - Fatal编程技术网

Python 如何通过ngrok在请求中包含Django CSRF令牌?

Python 如何通过ngrok在请求中包含Django CSRF令牌?,python,django,csrf,facebook-login,ngrok,Python,Django,Csrf,Facebook Login,Ngrok,我正在构建一个Django应用程序,该应用程序将托管在本地网络上,并使用Facebook登录执行身份验证。由于Facebook登录要求登录的回调地址为localhost或public addressable,因此我使用ngrok为Facebook创建一个地址,以便将数据返回到该地址 用户登录Facebook后,我使用AJAX从模板将他们的数据发布到本地视图(/fb_login),并保存到Django中的数据库中。由于身份验证基于此数据库,我认为避免Django对该视图执行CSRF检查是不明智的

我正在构建一个Django应用程序,该应用程序将托管在本地网络上,并使用Facebook登录执行身份验证。由于Facebook登录要求登录的回调地址为localhost或public addressable,因此我使用ngrok为Facebook创建一个地址,以便将数据返回到该地址

用户登录Facebook后,我使用AJAX从模板将他们的数据发布到本地视图(/fb_login),并保存到Django中的数据库中。由于身份验证基于此数据库,我认为避免Django对该视图执行CSRF检查是不明智的

为了在POST To/fb_登录中包含CSRF令牌,我使用了以下几个论坛建议的方法:

$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
            // Only send the token to relative URLs i.e. locally.
            xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
        }
    }
});
这应该只包括相对URL的CSRF令牌(我认为这是最佳实践)。当我在localhost上运行服务器并从同一台机器上执行Facebook登录时,这一切正常。然而,当我在本地主机上运行系统,并从本地网络上的另一台机器通过ngrok访问它并执行Facebook登录时,我收到403和一条消息,表明CSRF检查失败。这让我相信ngrok URL不被认为是“本地的”,因此没有设置CSRF令牌


假设我在Django服务器启动时知道我的ngrok URL是什么,我是否可以将其包含在被视为“本地”地址中,以便包含CSRF令牌?有没有其他安全的方法?请注意,web开发不是我的领域,所以如果我在这里有误解,请告诉我。谢谢

有什么消息吗?