• Django商城项目笔记No.9用户部分-注册接口签发JWTtoken


    Django商城项目笔记No.9用户部分-注册接口签发JWTtoken

    我们在验证完用户的身份后(检验用户名和密码),需要向用户签发JWT,在需要用到用户身份信息的时候,还需核验用户的JWT。

    关于签发和核验JWT,我们可以使用Django REST framework JWT扩展来完成。

    安装配置

    # 安装
    pip install djangorestframework-jwt
    # 配置
    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
            'rest_framework.authentication.SessionAuthentication',
            'rest_framework.authentication.BasicAuthentication',
        ),
    }
    
    JWT_AUTH = {
        'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
    }
    • JWT_EXPIRATION_DELTA 指明token的有效期

    手动签发JWT的方法

    from rest_framework_jwt.settings import api_settings
    
    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)

    在注册成功后,连同返回token,需要在注册视图中创建token。

    修改CreateUserSerializer序列化器,在create方法中增加手动创建token的方法

    注意导包

    oken有了,我们需要将token返回给前端,怎么反呢?

    我们返回的是user模型类转换后的json数据,那么就将token增加到user模型类中即可:

    因为token字段只需要返回给前端,所以是read_only,只需要序列化。

    返回user前,给user模型类增加token属性:

    问题:

    为啥还要添加user.token=token。给user增加token属性呢?

    上边的序列号器不是增加过token了?注意序列化器是序列化器,模型类是模型类。

    序列化器中有token字段,只会在序列化的时候,帮助你序列化token字段而已,但是你的模型类中没有token字段,序列化器怎么帮你做序列化操作呢?(序列化是将模型类转换为字典,转换为json)

     测试

  • 相关阅读:
    【题解】Luogu p2016 战略游戏 (最小点覆盖)
    【模板】Linux下输出文件的对比
    【题解】Luogu P3052 【USACO12】摩天大楼里的奶牛Cows in a Skyscraper
    【题解】滑雪 luogu1434 记忆化搜索
    【题解】Luogu P3110 [USACO14DEC]驮运Piggy Back
    【题解】Luogu P3123 [USACO15OPEN]贝茜说哞Bessie Goes Moo
    【题解】Luogu P2214 [USACO14MAR]哞哞哞Mooo Moo
    【题解】Luogu P2327 [SCOI2005]扫雷
    【题解】Luogu P1011 车站
    【题解】Luogu P2889 [USACO07NOV]挤奶的时间Milking Time
  • 原文地址:https://www.cnblogs.com/blog-rui/p/9746186.html
Copyright © 2020-2023  润新知