@@ -127,7 +127,8 @@ def _create_token(
127
127
algorithm : Optional [str ] = None ,
128
128
headers : Optional [Dict ] = None ,
129
129
issuer : Optional [str ] = None ,
130
- audience : Optional [Union [str ,Sequence [str ]]] = None
130
+ audience : Optional [Union [str ,Sequence [str ]]] = None ,
131
+ user_claims : Optional [Dict ] = {}
131
132
) -> str :
132
133
"""
133
134
Create token for access_token and refresh_token (utf-8)
@@ -140,6 +141,7 @@ def _create_token(
140
141
:param headers: valid dict for specifying additional headers in JWT header section
141
142
:param issuer: expected issuer in the JWT
142
143
:param audience: expected audience in the JWT
144
+ :param user_claims: Custom claims to include in this token. This data must be dictionary
143
145
144
146
:return: Encoded token
145
147
"""
@@ -152,6 +154,8 @@ def _create_token(
152
154
raise TypeError ("audience must be a string or sequence" )
153
155
if algorithm and not isinstance (algorithm , str ):
154
156
raise TypeError ("algorithm must be a string" )
157
+ if user_claims and not isinstance (user_claims , dict ):
158
+ raise TypeError ("user_claims must be a dictionary" )
155
159
156
160
# Data section
157
161
reserved_claims = {
@@ -185,7 +189,7 @@ def _create_token(
185
189
raise
186
190
187
191
return jwt .encode (
188
- {** reserved_claims , ** custom_claims },
192
+ {** reserved_claims , ** custom_claims , ** user_claims },
189
193
secret_key ,
190
194
algorithm = algorithm ,
191
195
headers = headers
@@ -256,7 +260,8 @@ def create_access_token(
256
260
algorithm : Optional [str ] = None ,
257
261
headers : Optional [Dict ] = None ,
258
262
expires_time : Optional [Union [timedelta ,int ,bool ]] = None ,
259
- audience : Optional [Union [str ,Sequence [str ]]] = None
263
+ audience : Optional [Union [str ,Sequence [str ]]] = None ,
264
+ user_claims : Optional [Dict ] = {}
260
265
) -> str :
261
266
"""
262
267
Create a access token with 15 minutes for expired time (default),
@@ -272,6 +277,7 @@ def create_access_token(
272
277
algorithm = algorithm ,
273
278
headers = headers ,
274
279
audience = audience ,
280
+ user_claims = user_claims ,
275
281
issuer = self ._encode_issuer
276
282
)
277
283
@@ -281,7 +287,8 @@ def create_refresh_token(
281
287
algorithm : Optional [str ] = None ,
282
288
headers : Optional [Dict ] = None ,
283
289
expires_time : Optional [Union [timedelta ,int ,bool ]] = None ,
284
- audience : Optional [Union [str ,Sequence [str ]]] = None
290
+ audience : Optional [Union [str ,Sequence [str ]]] = None ,
291
+ user_claims : Optional [Dict ] = {}
285
292
) -> str :
286
293
"""
287
294
Create a refresh token with 30 days for expired time (default),
@@ -295,7 +302,8 @@ def create_refresh_token(
295
302
exp_time = self ._get_expired_time ("refresh" ,expires_time ),
296
303
algorithm = algorithm ,
297
304
headers = headers ,
298
- audience = audience
305
+ audience = audience ,
306
+ user_claims = user_claims
299
307
)
300
308
301
309
def _get_csrf_token (self ,encoded_token : str ) -> str :
0 commit comments