Google OAuth报错:'InstalledAppFlow'无'run_console'属性,求解决
解决InstalledAppFlow无run_console属性的授权问题
错误原因
run_console() 是 google-auth-oauthlib 旧版本(v0.4.x及更早)的方法,新版本已移除该接口,统一改用基于本地服务器的授权模式,但可以通过参数配置实现无浏览器的控制台授权流程。
解决方案
1. 更新依赖库
首先确保使用最新版的Google授权相关库:
pip install --upgrade google-auth-oauthlib google-api-python-client
2. 修改授权代码
替换原脚本中调用 run_console() 的代码,选用以下两种方案之一:
方案一:用run_local_server实现无浏览器授权
通过指定 launch_browser=False 禁用服务器端浏览器启动,控制台会直接输出授权链接,手动完成授权:
from google_auth_oauthlib.flow import InstalledAppFlow # 定义所需的API权限范围,比如创建用户的admin.directory.user.create等 SCOPES = ['https://www.googleapis.com/auth/admin.directory.user'] flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES) # port=0让系统自动分配可用端口,避免端口占用问题 credentials = flow.run_local_server(port=0, launch_browser=False)
运行后控制台会打印授权链接,在本地浏览器打开该链接,用你的Google Workspace账户授权,复制生成的授权码后粘贴回服务器控制台即可。
方案二:手动实现控制台授权流程
如果上述方法仍有问题,可以手动处理授权URL和代码输入:
from google_auth_oauthlib.flow import InstalledAppFlow SCOPES = ['https://www.googleapis.com/auth/admin.directory.user'] flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES) # 生成授权URL,prompt='consent'确保每次都显示授权页面 auth_url, _ = flow.authorization_url(prompt='consent') print(f"授权链接:{auth_url}") auth_code = input("请输入授权后获取的代码:").strip() # 通过授权码获取凭证 credentials = flow.fetch_token(code=auth_code)
3. 注意事项
- 确保你的OAuth 2.0客户端ID是桌面应用类型(在Google Cloud控制台创建客户端ID时选择),web应用类型无法使用InstalledAppFlow。
- 授权完成后,凭证会自动保存到本地(默认路径为
~/.cache/google-api-python-client/),后续运行脚本无需重复授权。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

