Merge pull request #19 from mattduck/fix-auth-token-refreshing

Fix user having to log in after token refresh
This commit is contained in:
Paul Lamere 2014-08-17 10:26:41 -04:00
commit 05a459e1bd
2 changed files with 13 additions and 4 deletions

View File

@ -2,6 +2,7 @@
from __future__ import print_function from __future__ import print_function
import sys
import base64 import base64
import requests import requests
import json import json

View File

@ -39,7 +39,7 @@ class SpotifyOAuth(object):
return None return None
if self.is_token_expired(token_info): if self.is_token_expired(token_info):
new_token_info = self.refresh_access_token(token_info['refresh_token']) token_info = self.refresh_access_token(token_info['refresh_token'])
except IOError: except IOError:
pass pass
@ -91,8 +91,7 @@ class SpotifyOAuth(object):
if response.status_code is not 200: if response.status_code is not 200:
raise SpotifyOauthError(response.reason) raise SpotifyOauthError(response.reason)
token_info = response.json() token_info = response.json()
token_info['expires_at'] = int(time.time()) + token_info['expires_in'] token_info = self._add_custom_values_to_token_info(token_info)
token_info['scope'] = self.scope
self.save_token_info(token_info) self.save_token_info(token_info)
return token_info return token_info
@ -114,9 +113,18 @@ class SpotifyOAuth(object):
if response.status_code is not 200: if response.status_code is not 200:
raise SpotifyOauthError(response.reason) raise SpotifyOauthError(response.reason)
token_info = response.json() token_info = response.json()
token_info['expires_at'] = int(time.time()) + token_info['expires_in'] token_info = self._add_custom_values_to_token_info(token_info)
if not 'refresh_token' in token_info: if not 'refresh_token' in token_info:
token_info['refresh_token'] = refresh_token token_info['refresh_token'] = refresh_token
self.save_token_info(token_info) self.save_token_info(token_info)
return token_info return token_info
def _add_custom_values_to_token_info(self, token_info):
'''
Store some values that aren't directly provided by a Web API
response.
'''
token_info['expires_at'] = int(time.time()) + token_info['expires_in']
token_info['scope'] = self.scope
return token_info