8

我可以 使用 python 为 Google Drive执行quickstart.py 。但是我们如何存储令牌并再次使用它 - 再次为同一个用户而不提示用户。在 Google 驱动器上发送文件请求时,我可以通过某种方式将用户映射到访问令牌。

4

2 回答 2

9

有许多不同Storage的类型提供google-api-python-client其中一些是有据可查

一些例子:

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)
于 2013-03-19T15:14:26.593 回答
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
于 2014-02-03T21:13:47.647 回答