Skip to content

gs.oauth() authorized_user.json token expires every week #932

@Blazingi

Description

@Blazingi

Describe the bug
gs.oauth() authorized_user.json token expires every week, I have to manualy delete authorized_user.json to regain authentication

To Reproduce
Steps to reproduce the behavior:

  1. Authorize in browser after calling gs.oauth()
  2. Wait 1 week
  3. Token expired, client is unable to continue:
    RefreshError: ('invalid_grant: Token has been expired or revoked.', {'error': 'invalid_grant', 'error_description': 'Token has been expired or revoked.'})

Expected behavior
Gs should be able to refresh the token, have the option to request token for a longer than a week, or at least run browser authentication again

Environment info:

  • Arch Linux
  • Python version: 3.9.7-1
  • Gspread version: 3.7.0
Exception `RefreshError: ('invalid_grant: Token has been expired or revoked.', {'error': 'invalid_grant', 'error_description': 'Token has been expired or revoked.'}) --------------------------------------------------------------------------- RefreshError Traceback (most recent call last) /tmp/ipykernel_25388/854339441.py in ----> 1 scans_sheet.batch_get(['C:C', 'L:L', 'V:V'], major_dimension='COLUMNS')

~/.local/lib/python3.9/site-packages/gspread/utils.py in wrapper(*args, **kwargs)
590 kwargs.setdefault(k, v)
591
--> 592 return f(*args, **kwargs)
593
594 return wrapper

~/.local/lib/python3.9/site-packages/gspread/models.py in batch_get(self, ranges, **kwargs)
1025 )
1026
-> 1027 response = self.spreadsheet.values_batch_get(
1028 ranges=ranges, params=params
1029 )

~/.local/lib/python3.9/site-packages/gspread/models.py in values_batch_get(self, ranges, params)
207
208 url = SPREADSHEET_VALUES_BATCH_URL % (self.id)
--> 209 r = self.client.request("get", url, params=params)
210 return r.json()
211

~/.local/lib/python3.9/site-packages/gspread/client.py in request(self, method, endpoint, params, data, json, files, headers)
62 headers=None,
63 ):
---> 64 response = getattr(self.session, method)(
65 endpoint,
66 json=json,

/usr/lib/python3.9/site-packages/requests/sessions.py in get(self, url, **kwargs)
553
554 kwargs.setdefault('allow_redirects', True)
--> 555 return self.request('GET', url, **kwargs)
556
557 def options(self, url, **kwargs):

~/.local/lib/python3.9/site-packages/google/auth/transport/requests.py in request(self, method, url, data, headers, max_allowed_time, timeout, **kwargs)
472
473 with TimeoutGuard(remaining_time) as guard:
--> 474 self.credentials.before_request(auth_request, method, url, request_headers)
475 remaining_time = guard.remaining_timeout
476

~/.local/lib/python3.9/site-packages/google/auth/credentials.py in before_request(self, request, method, url, headers)
131 # the http request.)
132 if not self.valid:
--> 133 self.refresh(request)
134 self.apply(headers)
135

~/.local/lib/python3.9/site-packages/google/oauth2/credentials.py in refresh(self, request)
226 grant_response,
227 rapt_token,
--> 228 ) = reauth.refresh_grant(
229 request,
230 self._token_uri,

~/.local/lib/python3.9/site-packages/google/oauth2/reauth.py in refresh_grant(request, token_uri, refresh_token, client_id, client_secret, scopes, rapt_token)
336
337 if not response_status_ok:
--> 338 _client._handle_error_response(response_data)
339 return _client._handle_refresh_grant_response(response_data, refresh_token) + (
340 rapt_token,

~/.local/lib/python3.9/site-packages/google/oauth2/_client.py in _handle_error_response(response_data)
58 error_details = json.dumps(response_data)
59
---> 60 raise exceptions.RefreshError(error_details, response_data)
61
62

RefreshError: ('invalid_grant: Token has been expired or revoked.', {'error': 'invalid_grant', 'error_description': 'Token has been expired or revoked.'})`

Metadata

Metadata

Assignees

No one assigned

    Labels

    Need investigationThis issue needs to be tested or investigated

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions