Проблема с Facebook OAuth в Google Appengine - PullRequest
0 голосов
/ 22 февраля 2011

Я использую поток «Серверная сторона», чтобы получить права пользователя на доступ к некоторой информации с помощью Python в Google Appengine.

Я могу получить сгенерированный сервером код из Facebook после того, как пользователь нажмет кнопку «Разрешить».

Однако, когда я получаю токен доступа, я сталкиваюсь со следующей ошибкой:

Трассировка (последний последний вызов):
File "/ base / python_runtime / python_lib /version / 1 / google / appengine / ext / webapp / init .py ", строка 515, в вызов файл handler.get (* groups)" / base / data / home /apps / finisherph / 1.348502373491720746 / controllers.py ", строка 21, в файле get data = urllib2.urlopen (access_token_url)
Файл" /base/python_runtime/python_dist/lib/python2.5/urllib2.py ", строка 124,в urlopen вернуть _opener.open (url, data) Файл "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", строка 387, в открытом файле ответа = файл метаданных (req, response) "/ base / python_runtime/python_dist/lib/python2.5/urllib2.py ", строка 498, в http_response 'http', запрос, ответ, код, msg, hdrs) Файл" /base/python_runtime/python_dist/lib/python2.5/urllib2.py ", строка 425, по ошибке возвращает self._call_chain (* args) Файл" /base/python_runtime/python_dist/lib/python2.5/urllib2.py ", строка 360, в _call_chain result = func (* args) Файл "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", строка 506, в http_error_default вызывает HTTPError (req.get_full_url (), код, msg, hdrs, fp)HTTPError: HTTP Error 400: Bad Request

Вот код в моем контроллере, куда отправляется ответ от facebook после того, как пользователь нажимает кнопку «Разрешить».Это все еще хак, поэтому код немного грязный.Все еще пытаюсь заставить это работать.

class Register(webapp.RequestHandler):
            def get(self):
                code=self.request.get('code')
                logging.debug("code: "+code)
                accesst_url=["https://graph.facebook.com/oauth/access_token?"]
                accesst_url.append("client_id=CLIENT_ID&")
                import urllib         
                accesst_url.append(urllib.urlencode
                    ({'redirect_uri':'http://my.website.com/register/facebook/'}))
                accesst_url.append('&')
                accesst_url.append("client_secret=CLIENT_SECRET&")
                accesst_url.append("".join(["code=",str(code)]))
                logging.debug(accesst_url)
                access_token_url="".join(accesst_url)
                logging.debug(access_token_url)
                import urllib2
                data = urllib2.urlopen(access_token_url)
                    ...
                    ...

Ошибка возникает здесь:

data = urllib2.urlopen(access_token_url)

, когда я копирую и вставляю access_token_url из моих журналов, я получаю следующую ошибку:

{«error»: {«type»: «OAuthException», «message»: «Ошибка проверки кода подтверждения».}}

Что мне здесь не хватает?

1 Ответ

1 голос
/ 22 февраля 2011

Похоже, вы пытаетесь получить доступ к access_token как url, что не совсем верно.

Вот пример , который иллюстрирует, как аутентификация OAuth через FB выполняется через GAE.

  • Вы переходите на https://graph.facebook.com/oauth/authorize? с вашим client_id и redirect_uri
  • После авторизации выдает код, и вы используете code и client_secret для полученияaccess_token из https://graph.facebook.com/oauth/access_token
  • И затем вы используете этот access_token для работы в качестве пользователя Facebook.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...