2010-07-03 6 views
4

Je crée une application django qui crée un calendrier et un dossier google docs pour les utilisateurs, et utilise l'API pour insérer des événements et ajouter des documents. Il y a quelques mois, cela fonctionnait assez bien. maintenant je fais un refactoring majeur de mon code et, en testant les composants mentionnés ci-dessus, j'ai découvert qu'ils ne fonctionnent plus! Lorsque je tente de créer un dossier ou un calendrier, je reçois cette réponse de l'API:L'authentification OAuth échoue pour les API de données google pour les domaines hébergés utilisant gdata

RequestError: {'status': 401, 'body': '<HTML>\n<HEAD>\n<TITLE>Unknown authorization header</TITLE>\n</HEAD>\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>Unknown authorization header</H1>\n<H2>Error 401</H2>\n</BODY>\n</HTML>\n', 'reason': 'Unknown authorization header'} 

Mon code ressemble à ceci sur -Basé this example dans le Documentation- google (le code docs est plus court, donc je ll coller celui-là, si le bit d'authentification est en fait une fonction commune à la fois):

from gdata.auth import OAuthSignatureMethod, OAuthToken, OAuthInputParams 
from gdata.calendar.service import CalendarService 
from django.conf import settings 
client_instance = CalendarService() 
client_instance.SetOAuthInputParameters(OAuthSignatureMethod.HMAC_SHA1, 
           settings.OAUTH_CONSUMER_KEY, 
           consumer_secret=settings.OAUTH_CONSUMER_SECRET) 
user_tokens = UserToken.objects.get(user=user) 
if not user_tokens.oauth_access_token_value or not user_tokens.oauth_valid_token: 
    raise Exception('The user has not allowed us to access his services')  
oauth_token=OAuthToken(key=user_tokens.oauth_access_token_value, secret=user_tokens.oauth_access_token_secret) 
oauth_token.oauth_input_params = OAuthInputParams(OAuthSignatureMethod.HMAC_SHA1, 
         settings.OAUTH_CONSUMER_KEY, 
         consumer_secret=settings.OAUTH_CONSUMER_SECRET) 
client_instance.SetOAuthToken(oauth_token) 
new_folder = docs_service.CreateFolder("some folder") 

l'exception vient de cette dernière ligne, a changé quelque chose dans l'API ou il est juste moi? (Je parie que c'est juste moi, mais je ne peux pas le voir car il a travaillé deux mois)

Répondre

0

La raison est aménagé dans la réponse JSON: 'reason': 'Unknown authorization header'

Une cause possible est l'heure locale de votre machine . Assurez-vous que l'heure de votre machine locale est correcte, car oauth utilise l'horodatage unix actuel pour signer et vérifier les demandes. Google support forum

Voici une liste de bogues enregistrés. Le premier semble correspondre votre cas bien:

Hope this helps :)

Questions connexes