django使用jwt进行身份验证

前言

使用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里携带用户名密码登陆
django使用jwt进行身份验证_第1张图片
可以看到jwt为我们返回的token
2.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"
3.使用Postman携带token访问购物车
django使用jwt进行身份验证_第2张图片
一定要用这种格式访问

你可能感兴趣的:(django使用jwt进行身份验证)