使用新的JavaScript SDK发送facebook朋友邀请显示403禁止页面,但邀请成功发送

时间:2010-11-21 13:09:03

标签: django facebook

在我的django网站上,我使用新的facebook javascript SDK,允许我的用户向他们的Facebook好友发送好友邀请。

但是当用户发送网站邀请时(登录后并从Facebook弹出窗口中选择朋友),邀请会成功发送,但用户会看到“ 403禁止 - 检测到跨站点请求伪造。请求已中止”页面(发送邀请的同一网址)。如何克服这个csrf验证。

邀请的javascript代码(加载facebook SDK后):

<script>
function invitePopup() {
FB.login(function(response) {
    if (response.session) {
    // user successfully logged in 
    FB.ui({
        method:'fbml.dialog', 
        fbml: (
            '<fb:request-form action="http://{{site.domain}}{% url account_view %}" method="post" invite="true" type="{{ site.name }}" ' +
                'content="help the world by spreading good ideas. Join the move! <fb:req-choice url=\'http://{{site.domain}}{% url facebook_login %}?facebook_invitation=1\' label=\'Accept\' />" >' +                
                '<fb:multi-friend-selector showborder="false" bypass="cancel" actiontext="Invite your friends to join {{ site.name }}" /> '+
            '</fb:request-form>'
            ),
            size: { width:640, height:480}, width:640, height:480
        });

    $(".FB_UI_Dialog").css('width', $(window).width()*0.8); // 80% of window width
    } else {
            // user cancelled login
        }
    });    

}
</script>

和触发部分:

<a href="#" onclick="invitePopup();" class="facebook">Invite your Facebook friends to join {{ site.name }} </a>

我尝试过一种解决方法,即使用csrf_exempt装饰器进行视图。但是我不想使用它,因为我在该视图中使用了更多需要csrf保护的表单。

1 个答案:

答案 0 :(得分:1)

你可以像这样包括crsf_token:

 FB.ui({
        method:'fbml.dialog', 
            fbml: (
                '<fb:request-form action="http://{{site.domain}}{% url account_view %}" method="post" invite="true" type="{{ site.name }}" ' +
'content="help the world by spreading good ideas. Join the move! <fb:req-choice url=\'http://{{site.domain}}{% url facebook_login %}?facebook_invitation=1\' label=\'Accept\' />" >'

 + "{% csrf_token %}"+  


'<fb:multi-friend-selector showborder="false" bypass="cancel" actiontext="Invite your friends to join {{ site.name }}" /> '+
                '</fb:request-form>'
                ),
                size: { width:640, height:480}, width:640, height:480
            });

适合我的作品。