欢迎访问宙启技术站
智能推送

如何在Python中使用InstalledAppFlow进行GoogleAuthOauthlib流程

发布时间:2023-12-13 08:28:01

Google Auth-Oauthlib是一个用于在Python中进行谷歌认证的库。它提供了一个InstalledAppFlow类,可以轻松地实现OAuth2.0的认证流程。

下面是一个使用InstalledAppFlow进行Google OAuth2.0认证的示例:

1. 首先,导入必要的库:

import os

import pickle

import google_auth_oauthlib.flow

import googleapiclient.discovery

2. 定义一些常量:

# OAuth2.0授权范围(可以根据需要修改)

SCOPES = ['https://www.googleapis.com/auth/userinfo.profile',

          'https://www.googleapis.com/auth/userinfo.email']

# 存储用户凭据的文件名

CREDS_FILENAME = 'credentials.pickle'

3. 定义一个函数以获取用户凭据:

def get_credentials():

    creds = None

    # 检查是否已存在用户凭据文件

    if os.path.exists(CREDS_FILENAME):

        with open(CREDS_FILENAME, 'rb') as f:

            creds = pickle.load(f)

    # 如果没有有效的凭据,则开始OAuth2.0认证流程

    if not creds or not creds.valid:

        # 使用InstalledAppFlow进行认证

        flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(

            'client_secrets.json', SCOPES)

        creds = flow.run_local_server(port=0)

        # 保存凭据到文件中,以便下次使用

        with open(CREDS_FILENAME, 'wb') as f:

            pickle.dump(creds, f)

    return creds

4. 使用获取的凭据进行API调用:

def main():

    # 获取用户凭据

    creds = get_credentials()

    # 创建Google API的服务实例

    service = googleapiclient.discovery.build('oauth2', 'v2', credentials=creds)

    # 调用API获取用户信息

    results = service.userinfo().get().execute()

    print(results)

if __name__ == '__main__':

    main()

在上述代码中,我们首先定义了一些常量,例如OAuth2.0的授权范围和存储用户凭据的文件名。

然后,我们定义了一个get_credentials函数,用于获取用户凭据。在函数中,我们首先检查是否存在已保存的用户凭据文件,如果存在且有效,则直接读取;否则,我们使用InstalledAppFlow类开始认证流程。在认证流程中,我们需要提供存储开发者凭据的客户端密钥文件(client_secrets.json)和授权范围(SCOPES)。完成认证后,我们将凭据保存到文件中,以便下次使用。最后,我们返回获得的凭据。

在main函数中,我们首先调用get_credentials函数获取凭据。然后,我们使用googleapiclient.discovery.build函数创建了使用用户凭据进行认证的Google API服务实例。最后,我们调用service.userinfo().get().execute()方法获取用户信息,并将结果打印出来。

请确保你已经在开发者控制台上创建了一个项目,并生成了对应的客户端密钥文件(client_secrets.json)。