存储来自Google OAuth 2.0的访问令牌,以便从应用程序帐户访问驱动器数据

时间:2013-03-19 06:42:21

标签: google-drive-api google-api-python-client

我可以使用python为Google云端硬盘执行quickstart.py。但是我们如何存储令牌并再次使用它 - 再次针对同一用户而不提示用户。他们可以通过某种方式在Google云端硬盘上发送文件请求时使用访问令牌映射用户。

2 个答案:

答案 0 :(得分:9)

Storage提供了许多不同的google-api-python-client类型,其中somewell documented

一些例子:

oauth2client.file.Storage:

from oauth2client.file import Storage
...
storage = Storage('a_credentials_file')
storage.put(credentials)
...
credentials = storage.get()

oauth2client.keyring_storage.Storage:

from oauth2client.keyring_storage import Storage
...
storage = Storage('application name', 'user name')
storage.put(credentials)
...
credentials = storage.get()

oauth2client.appengine.StorageByKeyName:

from oauth2client.keyring_storage import StorageByKeyName
from oauth2client.keyring_storage import CredentialsNDBModel
...
storage = StorageByKeyName(CredentialsNDBModel, some_user_id, 'credentials')
storage.put(credentials)
...
credentials = storage.get()

oauth2client.django_orm.Storage:

from django.contrib.auth.models import User
from oauth2client.django_orm import Storage
from your_project.your_app.models import CredentialsModel
...
user = # A User object usually obtained from request.
storage = Storage(CredentialsModel, 'id', user, 'credential')
credential = storage.get()
...
storage.put(credential)

答案 1 :(得分:3)

我认为你应该赞扬bossylobster获得更完整的答案,但根据你的评论,这正是我的设置,我使用Storage类扩充了quickstart.py:

#!/usr/bin/python                                                                                                                         
import httplib2
import pprint

from apiclient.discovery import build
from apiclient.http import MediaFileUpload
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.file import Storage

# Copy your credentials from the console                                                                                                  
CLIENT_ID = 'PASTE_YOUR_ID'
CLIENT_SECRET = 'PASTE_YOUR_SECRET'

# Check https://developers.google.com/drive/scopes for all available scopes                                                               
OAUTH_SCOPE = 'https://www.googleapis.com/auth/drive'

# Redirect URI for installed apps                                                                                                         
REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob'

# Create a credential storage object.  You pick the filename.
storage = Storage('a_credentials_file')

# Attempt to load existing credentials.  Null is returned if it fails.
credentials = storage.get()

# Only attempt to get new credentials if the load failed.
if not credentials:

    # Run through the OAuth flow and retrieve credentials                                                                                 
    flow = OAuth2WebServerFlow(CLIENT_ID, CLIENT_SECRET, OAUTH_SCOPE, REDIRECT_URI)

    authorize_url = flow.step1_get_authorize_url()
    print 'Go to the following link in your browser: ' + authorize_url
    code = raw_input('Enter verification code: ').strip()

    credentials = flow.step2_exchange(code)
    storage.put(credentials)


# Create an httplib2.Http object and authorize it with our credentials                                                                    
http = httplib2.Http()
http = credentials.authorize(http)
drive_service = build('drive', 'v2', http=http)

# Use 'drive_service' for all of the API calls