django使用jwt进行身份验证
2018-07-08 本文已影响1145人
人生苦短啊
前言
使用django-rest-framework开发api并使用json web token进行身份验证
在这里使用django-rest-framework-jwt这个库来帮助我们简单的使用jwt进行身份验证
并解决一些前后端分离而产生的跨域问题
安装django-rest-framework
在终端输入以下命令安装
pip install djangorestframework
pip install djangorestframework-jwt
在settings.py的INSTALLED_APPS中加入:
INSTALLED_APPS = [
...
'rest_framework',
'rest_framework.authtoken', # 设置token
...
]
安装django-cors-headers
解决api跨域请求有好几种方法,比如(jsonp,在apache或nginx中设置,在请求头里设置),我们这里使用这个包来方便的跨域
pip install django-cors-headers
配置settings.py文件
INSTALLED_APPS = [
...
'corsheaders',
...
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
...
]
后端配置
设置过期时间
还有很多配置需要自己看文档
import datetime
JWT_AUTH = {
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),
'JWT_AUTH_HEADER_PREFIX': 'JWT',
}
修改使用jwt验证的URL
from rest_framework_jwt.views import obtain_jwt_token
url(r'^login/', obtain_jwt_token),
测试
1.Postman里携带用户名密码登陆
可以看到jwt为我们返回的token2.Views里设置token验证
购物车需要token认证才能查看
class ShoppingCartViewset(viewsets.ModelViewSet):
"""
购物车功能
list:
获取购物车详情
create:
加入购物车
delete:
删除购物记录
"""
permission_classes = (IsAuthenticated, IsOwnerOrReadOnly)
# 标记需要进行jwt验证
authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)
serializer_class = ShopCartSerializer
lookup_field = "goods_id"