使用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登录流程。
