Origine n'est pas autorisé par Access-Control-Allow-Origin pour HTTP SUPPRIMER
-
25-10-2019 - |
Question
Je suis actuellement jouer avec JavaScript Facebook SDK et l'API Scores ( https: //developers.facebook .com / docs / partition / ). J'ai écrit scores et maintenant je veux supprimer des scores une petite application pour enregistrer (post). Affichage (sauvegarde) les fonctionne très bien.
Mon apparence de code comme ceci:
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.');
}
});
La variable « facebook » est un objet qui contient mes données d'application. Pour HTTP POST, il fonctionne très bien, mais pour HTTP SUPPRIMER je reçois la réponse "NetworkError: 400 Bad Request" dans Firebug (avec Firefox 10). J'ai vu que Firefox envoie d'abord un OPTIONS HTTP (pour voir si elle est autorisée à utiliser HTTP DELETE) ce qui conduit à cette erreur alors j'ai essayé la même chose avec Google Chrome. Google Chrome envoie un véritable HTTP SUPPRIMER qui puis retours:
"XMLHttpRequest ne peut pas charger https://graph.facebook.com/USER_ID/scores?access_token=APP_ID|APP_SECRET . Origine mon_domaine n'est pas autorisé par Access-Control-Allow-Origin ».
Je pense que cela est une question de domaine classique croix, mais comment le résoudre? J'ai ajouté mon domaine à mon application facebook ( https://developers.facebook.com/apps ) et Facebook a un paragraphe qui est appelé « Supprimer scores pour un utilisateur ». Donc, il doit être possible de supprimer les scores (en quelque sorte)?
La solution
En raison de ( XSS Cross-Site-Scripting ) un DELETE HTTP est impossible. Mais vous pouvez envoyer un HTTP POST demande avec le paramètre de requête méthode ? = Supprimer , qui supprime alors le score.
Exemple de code:
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.');
}
});
}
Autres conseils
This is the Cross Domain security issue.
The fact that your error contains the message "Origin MY_DOMAIN" would tell me that somewhere in your code you have copied one of Facebook's examples but not changed the value for MY_DOMAIN to the correct domain you are using.
I would check all of your code for the value "MY_DOMAIN".
Please ignore this advice if you have changed the value to hide your actual domain in your question.