Происхождение не допускается с помощью Access-Control-Allow-Origin для http delete

StackOverflow https://stackoverflow.com/questions/9308877

Вопрос

В настоящее время я играю с Facebook JavaScript SDK и API с результатами ( 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 запрос» в Firebug (с Firefox 10). Я видел, что Firefox сначала отправляет опции HTTP (чтобы увидеть, разрешено ли использовать HTTP Delete), что приводит к этой ошибке, поэтому я попробовал то же самое с Google Chrome. Google Chrome отправляет реальное удаление HTTP, которое затем возвращает:

"Xmlhttprequest не может загрузить https://graph.facebook.com/user_id/scores?access_token=App_id|PAPP_SECRETАнкет Происхождение my_domain не допускается с помощью контроля Access-Control-Allower-Origin ».

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

Это было полезно?

Решение

Из-за Перекрестная подпись (XSS) Удаление HTTP невозможно. Но вы можете отправить Http post запрос с параметрами запроса ? метод = удалить, который затем удаляет счет.

Пример кода:

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.');
    }
  });
}

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top