django-rest-framework配置json web token进行接口的认证
时间:2022-07-25
本文章向大家介绍django-rest-framework配置json web token进行接口的认证,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
使用django-rest-framework开发api并使用json web token进行身份验证 在这里使用django-rest-framework-jwt这个库来帮助我们简单的使用jwt进行身份验证 并解决一些前后端分离而产生的跨域问题
流程
安装
安装django-rest-framework
现在接口一般都是restful风格,所以我们直接使用这个框架
- 在终端输入以下命令安装
pip install djangorestframe
- 在settings.py的INSTALLED_APPS中加入:
INSTALLED_APPS = [ ... 'rest_framework', 'rest_framework.authtoken', # 设置token ... ]
安装django-rest-framework-jwt
安装jwt库,简单快速的生成我们所需要的token
- 在终端输入以下命令安装: pip install djangorestframework-jwt
- 在你的settings.py,添加JSONWebTokenAuthentication到Django REST框架DEFAULT_AUTHENTICATION_CLASSES # django-rest-framework设置 REST_FRAMEWORK = { 'PAGE_SIZE': 10, # 设置所有接口都需要被验证 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', ), 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.BasicAuthentication', ), }
安装django-cors-headers
解决api跨域请求有好几种方法,比如(jsonp,在apache或nginx中设置,在请求头里设置),我们这里使用这个包来方便的跨域
- 在终端输入如下命令:
pip install django-cors-headers
2.配置settings.py文件
INSTALLED_APPS = [
...
'corsheaders',
...
]
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware', # 注意顺序
...
)
CORS_ORIGIN_WHITELIST = (
#'*'
'127.0.0.1:8080',# 请求的域名
'localhost:8080',
'localhost',
)
配置
后端配置
- 在setting里设置token的过期时间import datetime JWT_AUTH = { 'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300), }
当然还有很多其他相关设置,可以自己翻阅文档
- 修改使用jwt验证的URL from rest_framework_jwt.views import obtain_jwt_token url(r'^api-token-auth/', obtain_jwt_token),
- 配置页面访问权限 按需设置访问权限,加上token之后基本上是不经过认证是不能查看或修改数据的
前端配置
(在前端我们使用jQuery封装的ajax来操作get和post)
- 使用post方法获取token并存入html的localStorage中
INSTALLED_APPS = [
...
'corsheaders',
...
]
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware', # 注意顺序
...
)
CORS_ORIGIN_WHITELIST = (
#'*'
'127.0.0.1:8080',# 请求的域名
'localhost:8080',
'localhost',
)
- 在请求数据时需要在头部添加token
<script type="text/javascript">
function test(){
$.ajax({
headers:{
'Authorization':'JWT '+localStorage.token //注意:jwt后面有个空格
},
type:"get",
url:"http://10.127.48.204:8000/snippets/1/",
success:function(result){
document.write(result.style);
}
})
}
<script>
这时如果如果ajax请求不在head中带上token那将被禁止请求。 所以在开发阶段,我们先应不让jwt拦截所有请求,这样对我们测试产生诸多不变
注:
- 上述环境在ubuntu16.04 lts django1.9中搭建测试成功
- 上述文字皆为个人看法,如有错误或建议请及时联系我
- JSP简单入门(3)
- 物化视图相关的性能改进 (r7笔记第58天)
- Maven 核心原理解析(1)
- LeetCode——Two Sum
- TensorFlow全新的数据读取方式:Dataset API入门教程
- 不经意发现的dba_objects和dba_tables中的细节(r7笔记第56天)
- LeetCode——Longest Substring Without Repeating Characters
- Python time模块详解(时间戳↔元组形式↔格式化形式三者转化)
- Maven 核心原理解析(2)
- Linux C 编程——互斥锁mutex
- python两个 list 获取交集,并集,差集的方法.
- python——时间与时间戳之间的转换
- Maven 核心原理解析(3)
- String中的null,以及String s;等区别详解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- POJ2955(区间dp)
- codeforces 224B(思维+双指针)
- java学习应用篇|idea的基本安装和使用
- codeforces 349B(贪心)
- codeforces 1311D(暴力)
- codeforces 1382C1(思维)
- java学习原理篇|如何学习使用一个新工具
- codeforces 545C(贪心)
- codeforces 1272D(dp)
- codeforces 1203D2(贪心)
- HDOJ 2112(最短路)
- codeforces 1384A(构造)
- codeforces 982C (dfs)
- POJ 2493 (map)
- codeforces 1417C(思维)