при отправке приглашения в друзья на Facebook с использованием нового javascript SDK отображается 403 запрещенных страницы, но приглашение успешно отправлено - PullRequest
0 голосов
/ 21 ноября 2010

На моем веб-сайте django я использую новый набор javascript SDK для Facebook, чтобы мои пользователи могли отправлять приглашения своим друзьям в Facebook.

Но Когда пользователи отправляют приглашение на веб-сайт (после входа в систему и выбора друзей из всплывающего окна Facebook), приглашение отправляется успешно, но пользователи видят « 403 Запрещено - обнаружен подделка межсайтового запроса. Запрос отменен» страница (по тому же адресу, с которого было отправлено приглашение). Как преодолеть эту проверку CSRF.

Код JavaScript для приглашения (после загрузки SDK facebook):

<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 Ответ

1 голос
/ 07 февраля 2011

Вы можете включить 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...