def create_jwt_payload(user, expiration_delta, issuer, version=None, **kwargs):
timezone.activate(settings.TIME_ZONE)
now = timezone.now()
expiration_date = now + datetime.timedelta(seconds=expiration_delta)
version = settings.JWT_VERSION if not version else version
not_before = now - datetime.timedelta(
seconds=settings.JWT_NBF_LEEWAY_SECONDS)
payload = {
"user": {
"id": user.id,
"username": user.username,
"email": user.email,
"first_name": user.first_name,
"last_name": user.last_name,
},
# used jwt RFC claims
# JWT expiration
"exp": int(expiration_date.strftime("%s")),
# Issuer of the token
"iss": issuer,
# Issued at
"iat": int(now.strftime("%s")),
# # Not before (dont use before)
"nbf": int(not_before.strftime("%s")),
# # Subject of the token
# "sub":
# # Audience of the token
# "aud":
# # JWT token id
# "jti":
# Version of the token
"version": version,
}
# Only set the permissions on the jwt token if forcen on settings
if settings.JWT_SET_PERMISSION_ON_TOKEN:
payload["permission"] = list(
user.project_permissions.values_list('key', flat=True))
# Set extra args
for k, v in kwargs.items():
payload[k] = v
return payload
评论列表
文章目录