Skip to content

Commit 91c7550

Browse files
chore(auth): add 𝘦𝘹𝘱𝘪𝘳𝘦𝘴𝘈𝘵 key on token grants
This key should help in deciding when to refresh an token.
1 parent c1f84ad commit 91c7550

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

firebase/auth/__init__.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"""
1414

1515
import json
16+
import math
1617
import datetime
1718
import python_jwt as jwt
1819
import jwcrypto.jwk as jwk
@@ -47,7 +48,6 @@ def __init__(self, api_key, credentials, requests, client_secret=None):
4748
self.credentials = credentials
4849
self.requests = requests
4950

50-
self.current_user = None
5151
self.provider_id = None
5252
self.session_id = None
5353

@@ -137,9 +137,8 @@ def sign_in_with_email_and_password(self, email, password):
137137
request_object = self.requests.post(request_ref, headers=headers, data=data)
138138

139139
raise_detailed_error(request_object)
140-
self.current_user = request_object.json()
141140

142-
return request_object.json()
141+
return _token_expire_time(request_object.json())
143142

144143
def sign_in_anonymous(self):
145144
""" Sign In Anonymously.
@@ -160,9 +159,8 @@ def sign_in_anonymous(self):
160159
request_object = self.requests.post(request_ref, headers=headers, data=data)
161160

162161
raise_detailed_error(request_object)
163-
self.current_user = request_object.json()
164162

165-
return request_object.json()
163+
return _token_expire_time(request_object.json())
166164

167165
def create_custom_token(self, uid, additional_claims=None, expiry_minutes=60):
168166
""" Create a Firebase Auth custom token.
@@ -231,7 +229,7 @@ def sign_in_with_custom_token(self, token):
231229

232230
raise_detailed_error(request_object)
233231

234-
return request_object.json()
232+
return _token_expire_time(request_object.json())
235233

236234
def refresh(self, refresh_token):
237235
""" Refresh a Firebase ID token.
@@ -259,12 +257,13 @@ def refresh(self, refresh_token):
259257

260258
# handle weirdly formatted response
261259
user = {
262-
"userId": request_object_json["user_id"],
260+
"localId": request_object_json["user_id"],
263261
"idToken": request_object_json["id_token"],
264-
"refreshToken": request_object_json["refresh_token"]
262+
"refreshToken": request_object_json["refresh_token"],
263+
"expiresIn": request_object_json["expires_in"]
265264
}
266265

267-
return user
266+
return _token_expire_time(user)
268267

269268
def get_account_info(self, id_token):
270269
""" Fetch user's stored account information.
@@ -461,9 +460,8 @@ def sign_in_with_oauth_credential(self, oauth2callback_url):
461460
request_object = self.requests.post(request_ref, headers=headers, json=data)
462461

463462
raise_detailed_error(request_object)
464-
self.current_user = request_object.json()
465463

466-
return request_object.json()
464+
return _token_expire_time(request_object.json())
467465

468466
def _token_from_auth_url(self, url):
469467
""" Fetch tokens using the authorization code from given URL.
@@ -562,3 +560,8 @@ def _load_client_secret(secret):
562560
secret = secret['web']
563561

564562
return secret
563+
564+
565+
def _token_expire_time(user):
566+
user['expiresAt'] = math.floor(datetime.datetime.today().timestamp() + int(user.get('expiresIn')) - 60)
567+
return user

0 commit comments

Comments
 (0)