2010-11-21 134 views
0

在我的django網站中,我使用新的facebook javascript SDK來允許我的用戶向朋友發送朋友邀請。使用新的JavaScript SDK發送Facebook好友邀請顯示403禁止頁面,但邀請發送成功

但是當用戶發送的網站邀請(登錄&從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

可以包括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 
      }); 

工作非常適合我。

hf

+0

不錯。我投票接受這個答案。 – 2012-01-10 15:52:28