如何解决我如何将简单 JWT 用于自定义用户模型
我正在管理我的用户模型(针对客户),但我不知道如何将 simple-jwt 用于自定义登录视图的客户模型。
models.py
from django.db import models
class Customer(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField(max_length=100)
password = models.CharField(max_length=100)
而且,我想通过保存刷新令牌来管理我的客户会话, 谁能告诉我我怎样才能做到这一点。
解决方法
经过一些研究,我得出的结论是,到目前为止,Simple JWT 对那些不是从 AbstactUserModel
派生的用户模型没有任何特殊支持
这意味着如果您正在管理 Customer 模型,则您需要从 AbstactUserModel
扩展它,或者您可以使用 jwt 而不是 Simple jwt。
首先用命令安装简单的jwt
pip install djangorestframework-simplejwt
然后,您必须配置 django 项目以使用带有 settings.py
REST_FRAMEWORK = {
...
'DEFAULT_AUTHENTICATION_CLASSES': (
...
'rest_framework_simplejwt.authentication.JWTAuthentication',)
...
}
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),'REFRESH_TOKEN_LIFETIME': timedelta(days=1),'ROTATE_REFRESH_TOKENS': False,'BLACKLIST_AFTER_ROTATION': True,'UPDATE_LAST_LOGIN': False,'ALGORITHM': 'HS256','SIGNING_KEY': settings.SECRET_KEY,'VERIFYING_KEY': None,'AUDIENCE': None,'ISSUER': None,'AUTH_HEADER_TYPES': ('Bearer',),'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION','USER_ID_FIELD': 'id','USER_ID_CLAIM': 'user_id','AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken','TOKEN_TYPE_CLAIM': 'token_type','JTI_CLAIM': 'jti','SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp','SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),}
在您的根目录 urls.py
中添加以下内容
from rest_framework_simplejwt.views import (
TokenObtainPairView,TokenRefreshView,)
urlpatterns = [
...
path('api/token/',TokenObtainPairView.as_view(),name='token_obtain_pair'),path('api/token/refresh/',TokenRefreshView.as_view(),name='token_refresh'),...
]
默认情况下,简单的 JWT 仅在令牌中发送用户 ID。您可以通过执行以下操作进一步自定义它以在您的 serializers.py
中发送更多信息
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
"""Customizes JWT default Serializer to add more information about user"""
@classmethod
def get_token(cls,user):
token = super().get_token(user)
token['name'] = user.name
token['email'] = user.email
token['is_superuser'] = user.is_superuser
token['is_staff'] = user.is_staff
return token
然后在您的 views.py
中添加以下内容
from users import serializers
class CustomTokenObtainPairView(TokenObtainPairView):
# Replace the serializer with your custom
serializer_class = serializers.CustomTokenObtainPairSerializer
,
我可以在具有自定义用户模型的应用之后添加 'rest_framework_simplejwt'
到 INSTALLED_APPS
来解决这个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。