栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

JWT token 相关配置 (全局配置 身份认证 重写Authenticate方法)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JWT token 相关配置 (全局配置 身份认证 重写Authenticate方法)

文章目录
    • 一. jwt 全局配置
    • 1.settings配置
    • 二. 配置jwt过期时间 自定义返回的json数据
    • 1.utils.py函数编写,返回指定格式的json数据
    • 2.settings配置
    • 三. 配置django的认证后端 目的是只让管理员登录 自定义一个认证类 重写Authenticate方法
    • 1.utils.py类编写 重写Authenticate方法
    • 2.settings配置
    • 四. 路由配置
    • 五. 模型类
    • 1.models.py里定义用户类
    • 2.settings配置
    • 3 添加测试数据

一. jwt 全局配置 1.settings配置
REST_FRAMEWORK = {
    # 身份认证
    'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework_jwt.authentication.JSONWebTokenAuthentication',),
}

import datetime
JWT_AUTH = {
    # jwt过期时间差值  3天过期
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=3),
    # 自定义返回的json数据   ****下一步加入
    'JWT_RESPONSE_PAYLOAD_HANDLER': 'users.utils.jwt_response_payload_handler',
}
二. 配置jwt过期时间 自定义返回的json数据 1.utils.py函数编写,返回指定格式的json数据

users.utils.jwt_response_payload_handler: 创建在users app下的utils.py的jwt_response_payload_handler函数
注意: jwt_response_payload_handler函数需要写

 在 users app下创建utils.py 然后编写

# 返回指定格式的json数据 token
def jwt_response_payload_handler(*args, **kwargs):
    print('args:', args)
    print('kwargs:', kwargs)
    token, user, request = args
    return {
        'code': 200,
        'username': user.username,
        'user_id': user.id,
        'token': token
    }
2.settings配置
 settings 配置文件里

import datetime
JWT_AUTH = {
    # jwt过期时间差值  3天过期
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=3),
    # 自定义返回的json数据
    'JWT_RESPONSE_PAYLOAD_HANDLER': 'users.utils.jwt_response_payload_handler',
}

三. 配置django的认证后端 目的是只让管理员登录 自定义一个认证类 重写Authenticate方法

users.utils.MyAuthentication: 创建在users app下的utils.py的MyAuthentication类
注意: MyAuthentication 类需要写 继承认证父类ModelBackend

1.utils.py类编写 重写Authenticate方法
在 users app下创建utils.py 然后编写

# 只让管理员登录 
class MyAuthentication(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        # 查询用户对象  可通过密码和手机号登录
        user = User.objects.filter(Q(username=username) | Q(phone=username)).first()
        # 判断 用户,密码, 是否是管理员
        if user and check_password(password, user.password) and user.is_staff:
            return user    # 验证通过返回对象 否则返回None
        else:
            return None
2.settings配置
 settings 配置文件里

AUTHENTICATION_BACKENDS = [
    'users.utils.MyAuthentication',  # 自定义认证
]
四. 路由配置

不继承视图类,而是obtain_jwt_token
接口根据具体需要修改

urlpatterns = [
    
    # 管理员登录验证
    path('login/', obtain_jwt_token),
   
]
五. 模型类 1.models.py里定义用户类
# 用户类
class User(AbstractUser):
    phone = models.CharField('手机号', max_length=11, null=True, unique=True, blank=True)
    last_login = models.DateTimeField('上次登录',  null=True, blank=True)
    def __str__(self):
        return self.username

    class Meta:
        db_table = "user_tb"
        verbose_name_plural = '用户表'
2.settings配置
# 认证的用户模型类
AUTH_USER_MODEL = 'users.User'
3 添加测试数据

通过 python manage.py shell 密文添加


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/840104.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号