API на Google Контакти: Съхраняване на кода за удостоверяване и обмен на токен

Аз съм нов в Python и нов в работата с API, така че това вероятно е основно... мога да направя първоначалната си заявка, която кара прозореца на браузъра да се отвори. В този момент потребителят трябва да направи своя избор на страницата за съгласие на Google. След това кодът за оторизация се връща...получавам всичко това. Въпросът ми е как да сложа на пауза изпълнението на моя код на Python, за да мога да изчакам разрешението на потребителя и да съхраня кода, от който се нуждая за следващата стъпка? Просто го тествам в Python 2.7, използвайки техните библиотеки, но съм заседнал в тази точка. Какво мога да сложа на стрелката? Оценяваме всяка помощ.

    from oauth2client.client import OAuth2WebServerFlow
    import webbrowser

    flow = OAuth2WebServerFlow(client_id=[id],
                       client_secret=[secret],
                       scope='https://www.google.com/m8/feeds',
                       redirect_uri='urn:ietf:wg:oauth:2.0:oob')

    auth_uri = flow.step1_get_authorize_url()
    webbrowser.open(auth_uri)

--->

    code=''
    credentials = flow.step2_exchange(code)

person RAW    schedule 29.01.2014    source източник


Отговори (1)


Ето примерен код, обработващ това за случай на уеб сървър. send_redirect не е реален метод, ще трябва първоначално да пренасочите потребителя към Google, след което при обратното си обаждане да размените кода за оторизация с набор от идентификационни данни.

Включих също начин за използване на идентификационни данни за OAuth2, върнати с библиотеката gdata, тъй като изглежда, че имате достъп до API за контакти:

from oauth2client.client import flow_from_clientsecrets

flow = flow_from_clientsecrets(
  "/path/to/client_secrets.json",
  scope=["https://www.google.com/m8/feeds"],
  redirect_url="http://example.com/auth_return"
)

# 1. To have user authorize, redirect them:
send_redirect(flow.step1_get_authorize_url())

# 2. In handler for "/auth_return":
credentials = flow.step2_exchange(request.get("code"))

# 3. Use them:

import gdata.contacts.client
import httplib2

# Helper class to add headers to gdata
class TokenFromOAuth2Creds:
  def __init__(self, creds):
    self.creds = creds
  def modify_request(self, req):
    if self.creds.access_token_expired or not self.creds.access_token:
      self.creds.refresh(httplib2.Http())
    self.creds.apply(req.headers)

# Create a gdata client
gd_client = gdata.contacts.client.ContactsClient(source='<var>YOUR_APPLICATION_NAME</var>')

# And tell it to use the same credentials
gd_client.auth_token = TokenFromOAuth2Creds(credentials)

Вижте също Унифициране на обработката на OAuth между gdata и по-новите API на Google

Въпреки това изглежда, че вече имате по-голямата част от този код във вашия въпрос. Надяваме се, че това ви дава по-пълен пример, с който да започнете да работите.

За тестване - ако просто искате да поставите на пауза интерпретатора на Python, докато чакате да изрежете и поставите код, бих избрал code = raw_input('Code:') (http://docs.python.org/2/library/functions.html#raw_input)

person aeijdenberg    schedule 29.01.2014
comment
Всъщност е базиран на уеб сървър, но тествах, без да съм настроил уеб сървър, така че наистина нямам начин да съхраня кода, добавен към моето пренасочване. Използвах пренасочването на инсталираното приложение като последно усилие, което предполагам, че така или иначе няма смисъл. Има ли еквивалентна библиотека за уеб приложение? - person RAW; 29.01.2014