2012-06-18 2 views
7

Это, наверное, очень глупый вопрос, но я смотрел на это часами и не могу найти то, что я делаю неправильно.«Отсутствует параметр redirect_uri» от Facebook с Python/Django

Я пытаюсь использовать Python для аутентификации с помощью API Facebook, но у меня возникают проблемы с запросом доступа к токену доступа. Получив код, я делаю запрос на https://graph.facebook.com/oauth/access_token так:

conn = httplib.HTTPSConnection("graph.facebook.com") 
params = urllib.urlencode({'redirect_uri':request.build_absolute_uri(reverse('some_app.views.home')), 
          'client_id':apis.Facebook.app_id, 
          'client_secret':apis.Facebook.app_secret, 
          'code':code}) 
conn.request("GET", "/oauth/access_token", params) 
response = conn.getresponse() 
response_body = response.read() 

В ответ я получаю

{ "Ошибка": { "сообщение": "Отсутствующие redirect_uri параметр",» type ":" OAuthException "," code ": 191}}

Любые идеи, что может быть не так? Я уже подтвердил, что передаваемый redirect_uri находится в домене приложения, но может ли это быть проблемой, что это локально локально, и этот домен просто перенаправлен на localhost файлом моих хостов?

Благодарим за помощь!

редактировать:

Я получил эту работу с помощью библиотеки запросов:

params = {'redirect_uri':request.build_absolute_uri(reverse('profiles.views.fb_signup')), 
          'client_id':apis.Facebook.app_id, 
          'client_secret':apis.Facebook.app_secret, 
          'code':code} 

r = requests.get("https://graph.facebook.com/oauth/access_token",params=params) 

Однако я по-прежнему предпочитаю зависеть от библиотеки, когда это должно быть изначально поддерживаются без особых трудностей. Может быть, это просят слишком много ...

+0

Если ваш локальный настроен правильно, он должен работать. Facebook проверяет, работает ли перенаправление –

+0

Вот что я подумал. Любые идеи, что еще может пойти не так? – user1462558

+0

mmm, на facebook разработчики идут в ваше приложение. Перенаправление uri должно соответствовать приложению uri –

ответ

1

В первом примере (один с помощью HTTPSConnection), вы проходящее params в теле запроса:

conn.request("GET", "/oauth/access_token", params) 

Это неверно (GET запросы должны не имеют тела). Вместо этого, параметры должны быть переданы в качестве строки запроса части URL:

conn.request("GET", "/oauth/access_token?" + params) 
Смежные вопросы