Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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
Django Facebook中缺少CSRF令牌';s post';签名请求';_Django_Facebook_Csrf - Fatal编程技术网

Django Facebook中缺少CSRF令牌';s post';签名请求';

Django Facebook中缺少CSRF令牌';s post';签名请求';,django,facebook,csrf,Django,Facebook,Csrf,我在Django项目中工作。目的是从Facebook导入用户信息。首先,我正在使用Facebook提供的注册社交插件。我有一个基本模板,包括注册插件的iframe;正如Facebook api文档所示。呈现此模板的视图如下所示: def registration(request): if (request.method == "POST"): return HttpResponse("it posted!") else: return rend

我在Django项目中工作。目的是从Facebook导入用户信息。首先,我正在使用Facebook提供的注册社交插件。我有一个基本模板,包括注册插件的iframe;正如Facebook api文档所示。呈现此模板的视图如下所示:

def registration(request):
    if (request.method == "POST"): 
        return HttpResponse("it posted!")
    else: 
        return render_to_response("ui/registration.html", {}, 
                                  context_instance=RequestContext(request))

当我按下插件上的register键,Facebook向我发送了已签名的请求,Django就抱怨缺少csrf令牌。我还尝试通过使用csrf(请求)在上下文字典中传递csrf令牌来显式地包含csrf令牌,但是这仍然不能解决问题。

csrf保护用于防止跨站点发布。但是,在这种情况下,您希望接受来自Facebook的帖子,因此您应该在您的视图上使用接受签名请求的
csrf\u豁免
decorator。参见CSRF例外部分:

CSRF保护用于防止跨站点发布。但是,在这种情况下,您希望接受来自Facebook的帖子,因此您应该在您的视图上使用接受签名请求的
csrf\u豁免
decorator。请参阅CSRF例外部分:

为此,您需要做几件事:

  • 您需要将您的csrf令牌作为一个参数传递到您的facebook请求,如其结尾所示:
  • 接下来,你必须像马克建议的那样,用
    @csrf\u export
    装饰你的视图
  • 最后,在您看来,您可以验证csrf令牌是否正常。您可以通过查看找到的django csrf中间件代码来窃取一些逻辑

  • 或者,您可以编写自己的中间件来检查来自facebook的csrf令牌,而不是步骤2和步骤3。

    为此,您需要做一些事情:

  • 您需要将您的csrf令牌作为一个参数传递到您的facebook请求,如其结尾所示:
  • 接下来,你必须像马克建议的那样,用
    @csrf\u export
    装饰你的视图
  • 最后,在您看来,您可以验证csrf令牌是否正常。您可以通过查看找到的django csrf中间件代码来窃取一些逻辑

  • 或者,您可以编写自己的中间件来检查来自facebook的csrf令牌,而不是步骤2和步骤3。

    查找fandjango应用程序,尤其是中间件。
    对我来说就是这样

    寻找fandjango应用程序,尤其是中间件。
    我已经尝试过这个解决方案,是的,这是一个解决办法。然而,facebook建议使用csrf令牌。检查页面的结尾。他们传递csrf令牌的方法与Django的意思不同,Django的意思是您必须使用豁免并自己进行检查。我已经尝试过该解决方案,是的,这是一个解决方案。然而,facebook建议使用csrf令牌。检查页面的结尾。他们传递csrf令牌的方法与Django的意思不同,Django的意思是你必须使用豁免并自己进行检查。