rest-framework-jwd的认证
关于
jwt
的认识可以自行百度下,现在django
中要使用jwt
,传送门
一、rest_framework
官方自带的认证请参考第一小节
二、关于使用第三方的认证方式
1、
github
上搜索相关的推荐使用2、安装
pip3 install djangorestframework-jwt
2、在
setting.py
中配置# REST_FRAMEWORK的配置 REST_FRAMEWORK = { ... # 配置jwt 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.BasicAuthentication', 'rest_framework.authentication.SessionAuthentication', 'rest_framework_jwt.authentication.JSONWebTokenAuthentication' ), }
3、配置
url
from rest_framework_jwt.views import obtain_jwt_token urlpatterns = [ path('token/', upload.QiNiuToken.as_view(), name='token'), ... # 配置jwt的认证方式来登陆 path('login/', obtain_jwt_token), ... ]
4、测试
localhost:8000/login/
(输入用户名和密码模拟登陆,用postman
使用post
请求)5、在别的接口中请求把返回的
token
加到header
里面去key:Authorization value:JWT <your_token>
**在vue中尝试使用token请求数据** ... getData(){ let header = {headers: {'Authorization':'JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTE0MDI3MTg2LCJlbWFpbCI6IjMzMjkwNDIzNEBxcS5jb20ifQ.3u1j15ce5gZ_tUxjGHiL4XuY7CdG_i_EeFuQVhMiXKA'}}; axios.get('http://localhost:8000/goods3/',header).then(result => { console.log('result', result); }) } ...
6、注意直接这样访问会报
401
错误JSONWebToken
可能过期- 不是每个接口都需要校验的,但是前端会全局配置的
7、就需要后端在视图层配置(在需要的视图中使用)
在
setting.py
中注释一行代码# REST_FRAMEWORK的配置 REST_FRAMEWORK = { ... # 配置jwt 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.BasicAuthentication', 'rest_framework.authentication.SessionAuthentication', # 转移到视图文件中配置 # 'rest_framework_jwt.authentication.JSONWebTokenAuthentication' ), }
2、视图类中配置
from rest_framework_jwt.authentication import JSONWebTokenAuthentication class GoodListViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): queryset = Goods.objects.all() serializer_class = GoodsSerializersModel # 使用过滤器 filter_backends = (filters.OrderingFilter,) # 单独定义 authentication_classes = (JSONWebTokenAuthentication,) ordering_fields = ('add_time','goods_num')
8、测试
二、配置过期时间
1、设置过期时间
**settings.py文件中** import datetime JWT_AUTH = { 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7), 'JWT_AUTH_HEADER_PREFIX': 'JWT', }
三、项目中使用
- 1、直接使用
jwt
的认证方式进行用户登陆 - 2、根据上一小节的方式配置用户多种登陆方式