Происхождение не допускается с помощью Access-Control-Allow-Origin для http delete
-
25-10-2019 - |
Вопрос
В настоящее время я играю с 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».
Пожалуйста, игнорируйте этот совет, если вы изменили ценность, чтобы скрыть свой фактический домен в своем вопросе.