web-dev-qa-db-fra.com

jQuery JSONP ajax, en-tête d'authentification non défini

J'essaie de faire une demande ajax à l'API Google Contacts avec la configuration suivante:

$.ajax({
  url: "https://www-opensocial.googleusercontent.com/api/people/@me/@all",
  dataType: 'jsonp',
  data: {
    alt: 'json-in-script'
  },
  headers: {
    'Authorization': 'Bearer ' + token
  },
  success: function(data, status) {
    return console.log("The returned data", data);
  }
});

Mais l'en-tête d'authentification ne semble pas être défini. Des idées?

The request

24
David Tuite

J'ai eu le même problème récemment. Essaye ça:

$.ajax({
  url: "https://www-opensocial.googleusercontent.com/api/people/@me/@all",
  dataType: 'jsonp',
  data: {
    alt: 'json-in-script'
  },
  success: function(data, status) {
    return console.log("The returned data", data);
  },
  beforeSend: function(xhr, settings) { xhr.setRequestHeader('Authorization','Bearer ' + token); } 
});

EDIT: On dirait que cela ne peut pas être fait avec JSONP. Modifier les en-têtes HTTP pour une demande JSONP

25
Andrew Church

Lorsqu'une authentification est nécessaire dans une demande interdomaine, vous devez utiliser un serveur proxy quelconque.

Depuis que vous utilisez dataType: jsonp entraîne la création de la requête HTTP à partir du script qui est ajouté au DOM, les en-têtes définis dans le $.ajax ne sera pas utilisé.

3
Dangladesh

Il semble que la plupart des ressources OAUTH2 REST acceptent le paramètre access_token dans le cadre de l'url de la demande

http://self-issued.info/docs/draft-ietf-oauth-v2-bearer.html#query-param

veuillez plutôt essayer le code suivant:

$.ajax({
            dataType: 'jsonp',
            url: url,                
            data: {
                'access_token':token.access_token
            },
            jsonpCallback: 'thecallback',
            success: function(data){
                _cb(data);
            },
            error: function(d){
                _cb(d);
            }
        });
0
user1413048