2010-11-21 2 views
0

На моем сайте django я использую новый фреймворк javascript SDK, чтобы позволить моим пользователям отправлять приглашение друзей своим друзьям в facebook.отправка приглашения на facebook приглашение с помощью нового javascript SDK показывает 403 запрещенную страницу, но приглашение отправлено успешно

Но когда пользователи отправляют на сайт приглашение (после Войти & выбора друзей из facebook всплывающего окна), приглашение высылается успешно, но пользователи видят «403 Forbidden. - Cross Site Request Подделка обнаружен запрос прерван» страницу (в тот же URL-адрес, с которого было отправлено приглашение). Как преодолеть это подтверждение 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

Nice. Я голосую за принятие этого ответа. –

Смежные вопросы