requests / requests-oauthlib

OAuthlib support for Python-Requests!
https://requests-oauthlib.readthedocs.org/
ISC License
1.71k stars 422 forks source link

`OAuth2Session`: Provide a default `token_updater` that just replaces `self.token` #411

Open smarie opened 4 years ago

smarie commented 4 years ago

To make the auto-refresh procedure work with our oauth2 server I discovered that I had to create the token_updater function myself, and that it was this very simple one-liner:

oauth_session = OAuth2Session(client=my_oauth_client,  # the client knows the scope already
                              auto_refresh_url=refresh_token_url,
                              auto_refresh_kwargs={'client_id': client_id,
                                                   'target': client_id,
                                                   'api_type': refresh_api_type},
                              # Until PR is accepted the scope need to be repeated
                              scope=scopes  # https://github.com/requests/requests-oauthlib/pull/409
                              )

# HERE: could we get rid of this code by default ?
# the update procedure that will be called on successful token refresh
def token_updater(new_token):
    oauth_session.token = new_token
oauth_session.token_updater = token_updater

Am I right to think that the last three lines of code could be done automatically by default ?

If so I can propose a PR

Mike-Nahmias commented 4 years ago

I think a default updater would be beneficial. I think you'll also need to set access_token. Maybe something like this within the OAuth2Session class:

def token_updater(self, token):
    self.token = token
    self.access_token = token['access_token']
hiporox commented 2 years ago

I think the issue is that client updates only happen if there is a token updater set (see https://github.com/requests/requests-oauthlib/blob/master/requests_oauthlib/oauth2_session.py#L537). If we move the self._client.add_token call outside of the if check, defining a default token_updater won't be necessary