浮光商城08-后端配置JWT验证接口

JWT验证

01. 安装配置

在开发中,关于登录功能,常用JWT验证。

关于签发和核验JWT,python中提供了一个PyJWT模块帮我们实现jwt的整体流程。

我们可以使用Django REST framework JWT扩展来完成。

文档网站:https://jpadilla.github.io/django-rest-framework-jwt/

  • 安装 djangorestframework-jwt
pip install djangorestframework-jwt
  • 配置jwt:settings/dev.py
# drf配置
REST_FRAMEWORK = {
    # 自定义异常处理
    'EXCEPTION_HANDLER': 'luffycityapi.utils.exceptions.exception_handler',
    # 自定义认证
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',  # jwt认证
        'rest_framework.authentication.SessionAuthentication',           # session认证
        'rest_framework.authentication.BasicAuthentication',
    ),
}

import datetime
# jwt认证相关配置项
JWT_AUTH = {
    # 设置jwt的有效期
    # 如果内部站点,例如:运维开发系统,OA,往往配置的access_token有效期基本就是15分钟,30分钟,1~2个小时
    'JWT_EXPIRATION_DELTA': datetime.timedelta(weeks=1), # 一周有效,
}

JWT_EXPIRATION_DELTA 指明token的有效期

02. 检验jwt生成

Django REST framework JWT 扩展的说明文档中提供了手动签发JWT的方法

官方文档:https://jpadilla.github.io/django-rest-framework-jwt/#creating-a-new-token-manually

# 可以进入到django的终端下测试生成token的逻辑
python manage.py shell

# 引入jwt配置
from rest_framework_jwt.settings import api_settings
# 获取载荷生成函数
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
# 获取token生成函数
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
# 生成载荷需要的字典数据。此处,拿数据库中的用户信息进行测试
from users.models import User
user = User.objects.first()
payload = jwt_payload_handler(user)  # user用户模型对象
# 生成token
token = jwt_encode_handler(payload)

在用户注册或登录成功后,在序列化器中返回用户信息以后同时返回token即可。

03. 在项目中使用JWT

Django REST framework-JWT为了方便开发者使用jwt,

提供了登录获取token的视图:obtain_jwt_token

开发者可以直接使用它绑定一个url地址即可。

在users/urls.py中绑定登陆视图

from django.urls import path
from rest_framework_jwt.views import obtain_jwt_token
from . import views

urlpatterns = [
    path("login/", obtain_jwt_token, name="login"),
]

# obtain_jwt_token实际上就是 rest_framework_jwt.views.ObtainJSONWebToken.as_view()

# 登录视图,获取access_token
# obtain_jwt_token = ObtainJSONWebToken.as_view()

# 刷新token视图,依靠旧的access_token生成新的access_token
# refresh_jwt_token = RefreshJSONWebToken.as_view()

# 验证现有的access_token是否有效
# verify_jwt_token = VerifyJSONWebToken.as_view()

接下来,我们通过postman来测试下功能,发送post请求,

数据以json传入,username和password是必填字段。

能获取到token说明配置成功。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值