Access-Control-Allow-Origin для HTTP DELETE не разрешен - PullRequest
2 голосов
/ 16 февраля 2012

Я в настоящее время играюсь с Facebook JavaScript SDK и API Scores (https://developers.facebook.com/docs/score/).Я написал небольшое приложение для сохранения (публикации) баллов и теперь хочу удалить баллы.Отправка (сохранение) их работает нормально.

Мой код выглядит следующим образом:

var deleteHighScoreUrl = 'https://graph.facebook.com/'+facebook.user.id+'/scores?access_token='+facebook.application.id+'|'+facebook.application.secret;

jQuery.ajax(
{
  type: 'DELETE',
  async: false,
  url: deleteHighScoreUrl,
  success: function(data, textStatus, jqXHR)
  {
    console.log('Score deleted.');
  }
});

Переменная «facebook» - это объект, который содержит данные моего приложения.Для HTTP POST это работает нормально, но для HTTP DELETE я получаю ответ «NetworkError: 400 Bad Request» в Firebug (с Firefox 10).Я увидел, что Firefox сначала отправляет HTTP-опции (чтобы узнать, разрешено ли использовать HTTP-удаление), что приводит к этой ошибке, поэтому я попробовал то же самое с Google Chrome.Google Chrome отправляет реальное HTTP-УДАЛЕНИЕ, которое затем возвращает:

"XMLHttpRequest не может загрузить https://graph.facebook.com/USER_ID/scores?access_token=APP_ID|APP_SECRET. Origin MY_DOMAIN не разрешен Access-Control-Allow-Origin".

Я думаю, что это классическая междоменная проблема, но как ее решить?Я добавил свой домен в свое приложение Facebook (на https://developers.facebook.com/apps), и у Facebook есть параграф, который называется «Удалить оценки для пользователя». Поэтому должна быть возможность удалить оценки (каким-либо образом)?

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Из-за Межсайтовый скриптинг ( XSS ) УДАЛЕНИЕ HTTP невозможно.Но вы можете отправить запрос HTTP POST с параметром запроса ? Method = delete , который затем удалит счет.

Facebook.prototype.deleteUsersHighScore = function()
{
  var deleteHighScoreUrl = 'https://graph.facebook.com/'+this.user.id+'/scores?access_token='+this.application.id+'|'+this.application.secret+'&method=delete';

  jQuery.ajax(
  {
    type: 'POST',
    async: false,
    url: deleteHighScoreUrl,
    success: function(data, textStatus, jqXHR)
    {
      console.log('Score deleted.');
    }
  });
}
0 голосов
/ 16 февраля 2012

Это проблема междоменной безопасности.

Тот факт, что ваша ошибка содержит сообщение «Origin MY_DOMAIN», говорит мне, что где-то в вашем коде вы скопировали один из примеров Facebook, но не изменили значение дляMY_DOMAIN на правильный домен, который вы используете.

Я бы проверил весь ваш код на значение "MY_DOMAIN".

Пожалуйста, игнорируйте этот совет, если вы изменили значение, чтобы скрыть фактический домен в своем вопросе.

...