Skip to content

Commit d06ccb6

Browse files
authored
fix: crash with InvalidAuthBlockingTokenError (#145)
1 parent fbb8771 commit d06ccb6

File tree

3 files changed

+12
-9
lines changed

3 files changed

+12
-9
lines changed

src/firebase_functions/identity_fn.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class AuthUserMetadata:
5959
creation_time: _dt.datetime
6060
"""The date the user was created."""
6161

62-
last_sign_in_time: _dt.datetime
62+
last_sign_in_time: _typing.Optional[_dt.datetime]
6363
"""The date the user last signed in."""
6464

6565

src/firebase_functions/private/_identity_fn.py

+9-6
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,15 @@ def _auth_user_info_from_token_data(token_data: dict[str, _typing.Any]):
6464

6565
def _auth_user_metadata_from_token_data(token_data: dict[str, _typing.Any]):
6666
from firebase_functions.identity_fn import AuthUserMetadata
67-
return AuthUserMetadata(
68-
creation_time=_dt.datetime.utcfromtimestamp(
69-
token_data["creation_time"] / 1000.0),
70-
last_sign_in_time=_dt.datetime.utcfromtimestamp(
71-
token_data["last_sign_in_time"] / 1000.0),
72-
)
67+
creation_time = _dt.datetime.utcfromtimestamp(
68+
int(token_data["creation_time"]) / 1000.0)
69+
last_sign_in_time = None
70+
if "last_sign_in_time" in token_data:
71+
last_sign_in_time = _dt.datetime.utcfromtimestamp(
72+
int(token_data["last_sign_in_time"]) / 1000.0)
73+
74+
return AuthUserMetadata(creation_time=creation_time,
75+
last_sign_in_time=last_sign_in_time)
7376

7477

7578
def _auth_multi_factor_info_from_token_data(token_data: dict[str, _typing.Any]):

src/firebase_functions/private/token_verifier.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,14 @@ def verify(self, token, request):
9595
'Firebase {0} has incorrect algorithm. Expected "RS256" but got '
9696
'"{1}". {2}'.format(self.short_name, header.get('alg'),
9797
verify_id_token_msg))
98-
elif self.expected_audience and self.expected_audience not in audience:
98+
elif not emulated and self.expected_audience and self.expected_audience not in audience:
9999
error_message = (
100100
'Firebase {0} has incorrect "aud" (audience) claim. Expected "{1}" but '
101101
'got "{2}". {3} {4}'.format(self.short_name,
102102
self.expected_audience, audience,
103103
project_id_match_msg,
104104
verify_id_token_msg))
105-
elif not self.expected_audience and audience != self.project_id:
105+
elif not emulated and not self.expected_audience and audience != self.project_id:
106106
error_message = (
107107
'Firebase {0} has incorrect "aud" (audience) claim. Expected "{1}" but '
108108
'got "{2}". {3} {4}'.format(self.short_name, self.project_id,

0 commit comments

Comments
 (0)