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

使用GoogleAuthOAuthlib中的InstalledAppFlow实现Python应用程序的Google登录流程

发布时间:2023-12-23 07:01:30

GoogleAuthOAuthlib是一个用于在Python应用程序中实现Google登录流程的库。它提供了一种使用简单的方式,使用Google OAuth 2.0协议来验证用户,并获取用户的访问令牌和刷新令牌。

首先,安装GoogleAuthOAuthlib库。

pip install google-auth-oauthlib

接下来,我们需要创建一个OAuth 2.0客户端ID。 请参考Google的文档以获取详细的指导。

一旦你有了客户端ID和秘密(即客户端密钥),我们就可以开始编写我们的登录流程代码了。

from google_auth_oauthlib.flow import InstalledAppFlow

# 定义您的客户端ID和密钥
CLIENT_ID = 'YOUR_CLIENT_ID'
CLIENT_SECRET = 'YOUR_CLIENT_SECRET'
SCOPES = ['https://www.googleapis.com/auth/userinfo.profile']

# 初始化流程
flow = InstalledAppFlow.from_client_secrets_file(
    'client_secrets.json',
    scopes=SCOPES
)

# 获取授权URL
auth_url, _ = flow.authorization_url(prompt='consent')

# 在浏览器中打开授权URL并获取授权码
print('请在浏览器中打开以下链接并授权:', auth_url)
auth_code = input('请输入授权码:')

# 通过授权码来获取访问令牌和刷新令牌
flow.fetch_token(
    token_url='https://accounts.google.com/o/oauth2/token',
    authorization_response=auth_code,
    client_secret=CLIENT_SECRET,
)

# 现在我们已经获得了访问令牌和刷新令牌,可以使用它们来进行后续操作,比如获取用户信息
from google.oauth2 import id_token
from google.auth.transport import requests

# 获取用户信息
info_url = 'https://www.googleapis.com/oauth2/v1/userinfo'
idinfo = id_token.verify_oauth2_token(
    flow.credentials.id_token,
    requests.Request(),
    CLIENT_ID
)

# 打印用户信息
print('用户ID:', idinfo['sub'])
print('用户姓名:', idinfo['name'])
print('用户头像:', idinfo['picture'])

在上面的代码中,我们首先从client_secrets.json文件中读取客户端ID和客户端密钥。然后,我们使用这些凭据创建一个InstalledAppFlow对象。

接下来,我们调用authorization_url()方法来获取授权URL,并在浏览器中打开该URL。用户将在浏览器中授权我们的应用程序。

然后,我们从用户处接收授权码,并使用fetch_token()方法来获取访问令牌和刷新令牌。

最后,我们使用id_token中的verify_oauth2_token()方法来验证访问令牌,并通过访问用户信息的API来获取用户的详细信息。

你可以根据你的需求,进一步操作获得的用户信息,比如进行数据持久化、授权之后的页面跳转等。

希望这个例子可以帮助你实现Python应用程序中的Google登录流程。