使用gspread OAuth授权后,每次运行代码仍需重新授权的问题求助
问题
- OS: Mint Linux 21.3
- Python: 3.10
- gspread: 6.0.0
- IDE: PyCHarm
我尝试使用gspread访问谷歌表格,虽能成功实现访问,但每次运行代码都需重新授权。
我已正确配置凭证,并指定了授权用户文件的存储位置。首次运行代码时,该文件会被创建,代码也能得到预期结果。但再次运行代码时,oauth方法似乎并未读取该授权用户文件,仍需重新授权,授权后代码才能正常运行。
代码如下:
import gspread SCOPES = ["https://www.googleapis.com/auth/spreadsheets"] SPREADSHEET_ID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" CRED_FILE = "client_secret.json" AUTH_USER_FILE = 'auth_user.json' gc = gspread.oauth(credentials_filename=CRED_FILE, scopes=SCOPES, authorized_user_filename=AUTH_USER_FILE) # Open a sheet from a spreadsheet in one go spreadsheet = gc.open_by_key(SPREADSHEET_ID) ws = spreadsheet.get_worksheet(0) # Update a range of cells using the top left corner address ws.update([[1, 2], [3, 4]], 'A1')
我是否遗漏了什么配置?为何每次运行都需要授权?我原以为授权会持续到过期为止。另外,我曾使用Google API客户端,授权后无需重复操作,但该工具对我来说难度较高,因此希望改用gspread。
解决方案
- 检查授权文件的权限与路径
确保auth_user.json所在目录有读写权限,Mint Linux下可通过命令调整:
chmod 600 auth_user.json
同时确认PyCharm的运行工作目录和文件存放目录一致,避免因相对路径导致文件找不到。建议直接使用绝对路径指定AUTH_USER_FILE,比如:
AUTH_USER_FILE = '/home/your_username/your_project/auth_user.json'
- 添加离线访问权限
如果auth_user.json中没有refresh_token字段,说明首次授权未请求离线访问,导致无法自动刷新令牌。修改SCOPES添加离线权限:
SCOPES = ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/offline"]
删除旧的auth_user.json后重新授权一次,后续就能自动刷新令牌,无需重复授权。
验证凭证配置
确认Google Cloud Console中创建的是「桌面应用」类型的OAuth客户端ID,且重定向URI设置为默认的http://localhost:8080/。如果重定向URI不匹配,授权文件可能无法被正常读取。排查版本兼容性
gspread 6.0.0可能存在OAuth处理的小问题,可尝试降级到稳定版本测试:
pip install gspread==5.12.0
内容的提问来源于stack exchange,提问作者Dave L.
相关产品推荐
相关产品推荐

