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)

 测试

原文地址:https://www.cnblogs.com/blog-rui/p/9746186.html