settings.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. from datetime import timedelta
  2. from django.conf import settings
  3. from django.test.signals import setting_changed
  4. from django.utils.translation import gettext_lazy as _
  5. from rest_framework.settings import APISettings as _APISettings
  6. from .utils import format_lazy
  7. USER_SETTINGS = getattr(settings, 'SIMPLE_JWT', None)
  8. DEFAULTS = {
  9. 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
  10. 'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
  11. 'ROTATE_REFRESH_TOKENS': False,
  12. 'BLACKLIST_AFTER_ROTATION': True,
  13. 'UPDATE_LAST_LOGIN': False,
  14. 'ALGORITHM': 'HS256',
  15. 'SIGNING_KEY': settings.SECRET_KEY,
  16. 'VERIFYING_KEY': None,
  17. 'AUDIENCE': None,
  18. 'ISSUER': None,
  19. 'JWK_URL': None,
  20. 'LEEWAY': 0,
  21. 'AUTH_HEADER_TYPES': ('Bearer',),
  22. 'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
  23. 'USER_ID_FIELD': 'id',
  24. 'USER_ID_CLAIM': 'user_id',
  25. 'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule',
  26. 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
  27. 'TOKEN_TYPE_CLAIM': 'token_type',
  28. 'JTI_CLAIM': 'jti',
  29. 'TOKEN_USER_CLASS': 'rest_framework_simplejwt.models.TokenUser',
  30. 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
  31. 'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
  32. 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
  33. }
  34. IMPORT_STRINGS = (
  35. 'AUTH_TOKEN_CLASSES',
  36. 'TOKEN_USER_CLASS',
  37. 'USER_AUTHENTICATION_RULE',
  38. )
  39. REMOVED_SETTINGS = (
  40. 'AUTH_HEADER_TYPE',
  41. 'AUTH_TOKEN_CLASS',
  42. 'SECRET_KEY',
  43. 'TOKEN_BACKEND_CLASS',
  44. )
  45. class APISettings(_APISettings): # pragma: no cover
  46. def __check_user_settings(self, user_settings):
  47. SETTINGS_DOC = 'https://django-rest-framework-simplejwt.readthedocs.io/en/latest/settings.html'
  48. for setting in REMOVED_SETTINGS:
  49. if setting in user_settings:
  50. raise RuntimeError(format_lazy(
  51. _("The '{}' setting has been removed. Please refer to '{}' for available settings."),
  52. setting, SETTINGS_DOC,
  53. ))
  54. return user_settings
  55. api_settings = APISettings(USER_SETTINGS, DEFAULTS, IMPORT_STRINGS)
  56. def reload_api_settings(*args, **kwargs): # pragma: no cover
  57. global api_settings
  58. setting, value = kwargs['setting'], kwargs['value']
  59. if setting == 'SIMPLE_JWT':
  60. api_settings = APISettings(value, DEFAULTS, IMPORT_STRINGS)
  61. setting_changed.connect(reload_api_settings)