Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions pyrebase/pyrebase.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
from uuid import uuid4

import python_jwt as jwt
from Crypto.PublicKey import RSA
import jwt as jwt
import datetime


Expand Down Expand Up @@ -94,19 +94,22 @@ def sign_in_anonymous(self):
self.current_user = request_object.json()
return request_object.json()

# Updated to use PyJwt as Python_jwt is deprecated
def create_custom_token(self, uid, additional_claims=None, expiry_minutes=60):
service_account_email = self.credentials.service_account_email
private_key = RSA.importKey(self.credentials._private_key_pkcs8_pem)
private_key = self.credentials._private_key_pkcs8_pem
payload = {
"iss": service_account_email,
"sub": service_account_email,
"aud": "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
"uid": uid
"uid": uid,
"iat": datetime.datetime.now(datetime.timezone.utc), # issued at time
"exp": datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(minutes=expiry_minutes) # expiration time
}
if additional_claims:
payload["claims"] = additional_claims
exp = datetime.timedelta(minutes=expiry_minutes)
return jwt.generate_jwt(payload, private_key, "RS256", exp)
payload.update(additional_claims)
token = jwt.encode(payload, private_key, algorithm="RS256") #create token
return token

def sign_in_with_custom_token(self, token):
request_ref = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken?key={0}".format(self.api_key)
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ requests>=2.31
urllib3>=1.21.1,<2
gcloud>=0.18.3
oauth2client>=4.1.2
python-jwt>=2.0.1
pyjwt>=2.8.0
pycryptodome>=3.6.4