I use drf-jwt : https://styria-digital.github.io/django-rest-framework-jwt/
i made token
def jwt_login(user: User):
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
return token
and User model here
class User(AbstractUser):
username = None
email = models.EmailField(unique=True, db_index=True)
secret_key = models.CharField(max_length=255, default=get_random_secret_key)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
class Meta:
swappable = 'AUTH_USER_MODEL'
@property
def name(self):
if not self.last_name:
return self.first_name.capitalize()
return f'{self.first_name.capitalize()} {self.last_name.capitalize()}'
And Urls
path('api-jwt-auth/', verify_jwt_token),
path('api-jwt-auth/2', obtain_jwt_token),
path('api-jwt-auth/3', refresh_jwt_token),
And Settings
JWT_EXPIRATION_DELTA_DEFAULT = 2.628e+6 # 1 month in seconds
JWT_AUTH = {
'JWT_EXPIRATION_DELTA': datetime.timedelta(
seconds=env.int(
'DJANGO_JWT_EXPIRATION_DELTA',
default=JWT_EXPIRATION_DELTA_DEFAULT
)
),
'JWT_AUTH_HEADER_PREFIX': 'JWT',
'JWT_GET_USER_SECRET_KEY': lambda user: user.secret_key,
'JWT_RESPONSE_PAYLOAD_HANDLER': 'pick_restful.selectors.jwt_response_payload_handler',
'JWT_AUTH_COOKIE': 'jwt_token',
'JWT_AUTH_COOKIE_SAMESITE': 'None'
}
I got jwt-token But I can't verify this token in /api-jwt-auth/
this error
what's wrong?
Internal Server Error: /api-jwt-auth/ Traceback (most recent call last): File "/home/ec2-user/back-end/venv/pick/lib/python3.7/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request) File "/home/ec2-user/back-end/venv/pick/lib/python3.7/site-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/ec2-user/back-end/venv/pick/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs) File "/home/ec2-user/back-end/venv/pick/lib/python3.7/site-packages/django/views/generic/base.py", line 70, in view
return self.dispatch(request, *args, **kwargs) File "/home/ec2-user/back-end/venv/pick/lib/python3.7/site-packages/rest_framework/views.py", line 509, in dispatch
response = self.handle_exception(exc) File "/home/ec2-user/back-end/venv/pick/lib/python3.7/site-packages/rest_framework/views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc) File "/home/ec2-user/back-end/venv/pick/lib/python3.7/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
raise exc File "/home/ec2-user/back-end/venv/pick/lib/python3.7/site-packages/rest_framework/views.py", line 506, in dispatch
response = handler(request, *args, **kwargs) File "/home/ec2-user/back-end/venv/pick/lib/python3.7/site-packages/rest_framework_jwt/views.py", line 34, in post
jwt_create_response_payload(token, user, request, issued_at) File "/home/ec2-user/back-end/venv/pick/lib/python3.7/site-packages/rest_framework_jwt/authentication.py", line 58, in jwt_create_response_payload
return api_settings.JWT_RESPONSE_PAYLOAD_HANDLER(*args, **kwargs) TypeError: jwt_response_payload_handler() takes from 1 to 3 positional arguments but 4 were given