flask验证登录学习过程(1)---实践flask_jwt
flask_jwt应用代码:
from flask import Flask
from flask_jwt import JWT,jwt_required,current_identity
from werkzeug.security import safe_str_cmp
import json class User(object):
def __init__(self,id,username,password):
self.id = id
self.username = username
self.password = password def __str__(self):
return "User(id='%s')"% self.id users = [
User(1,'user1','abcxyz'),
User(2,'user2','abcxyz'),
]
username_table = {u.username: u for u in users}
userid_table = {u.id: u for u in users} def authenticate(username,password):
user = username_table.get(username, None)
if user and safe_str_cmp(user.password.encode('utf-8'),password.encode('utf-8')):
return user def identity(payload):
user_id = payload['identity']
return userid_table.get(user_id, None) app = Flask(__name__)
app.debug = True
app.config['SECRET_KEY'] = 'super-secret' jwt = JWT(app, authenticate, identity) @app.route('/protected')
@jwt_required()
def protected():
print "this protected is successed!!!"
return '%s' % current_identity if __name__ == '__main__':
app.run(host='0.0.0.0',port=5000)
应用代码主要是根据官方文档来的
发送post请求(也可以用浏览器插件如postman来,但是我自己的用了插件总是报401错误,所以自己写请求试)
import requests
headers={
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip,deflate, lzma, sdch",
"Accept-Language": "zh-CN,zh;q=0.8",
"Content-Type": "application/json",
"Connection": "keep-alive",
"Host": "localhost:5000",
"pgrade-Insecure-Requests": "",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36 OPR/33.0.1990.43"
}
data = {
"username":"user1",
"password":"abcxyz"
}
url = 'http://127.0.0.1:5000/auth'
r = requests.post(url,data=data) print r.json()
这个是发送请求,打印出返回的access-token
应该请求:
import requests
headers={
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip,deflate, lzma, sdch",
"Accept-Language": "zh-CN,zh;q=0.8",
"Content-Type": "application/json",
"Connection": "keep-alive",
"Host": "localhost:5000",
"pgrade-Insecure-Requests": "1",
"Authorization": u"JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGl0eSI6MSwiaWF0IjoxNTE1NjYzNzY2LCJuYmYiOjE1MTU2NjM3NjYsImV4cCI6MTUxNTY2NDA2Nn0.2Ij36x46dfPLnAWGcdJDc-mC0GO6Q6EcMGul7YE3my4", #应用请求到的token信息
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36 OPR/33.0.1990.43"
}
data = {
"username":"user1",
"password":"abcxyz"
}
url = 'http://127.0.0.1:5000/protected'
r = requests.get(url,headers=headers,data=data) #请求时,需要加headers,请求方法可以自己定义,但是官方文档上protected路径的请求方法好像默认为get,在定义时改为post方法,并在此处发post请求时,依然报405错误 print r.json()
会在服务端看到200的状态码,请求成功
总结:当然这个学习过程也不是一帆风顺的,例如
发送请求之后,一直报“”nonetype“”错误,说对象没有get属性,
经过排查发现,是获取到请求数据为空,然后自己在源码上修改为data=request.form.to_dict()
直接将请求的数据获取到,然后才请求成功生成access-token。
当然这个过程是实现了,,,但是还有很多的疑问没有弄的非常清楚,在问光耀问题的时候,
听光耀说,这个是因为自己对HTTP的基本原理不熟悉,还需要加强这一块的基础知识。所以今天特意买了书
希望能补上自己这块的不足之处。
flask验证登录学习过程(1)---实践flask_jwt的更多相关文章
- flask验证登录学习过程(1)---准备
对应flask的接口开发,目前自己可以熟练的进行.但是深入到更基础的,从注册到验证登录的过程一直不是特别清楚. 趁着年度不是特别忙的时候,特意去学习加强一下.把这个过程记录在此处. 首先是规划一个项目 ...
- python验证登录
一个web2.0时代的网站,自然少不了用户注册,登录,验证的功能,那么python可以怎样实现登录验证呢 这里我们使用装饰器来做登录验证 网站构成 假设我们有这样一个网站,是一个类似与博客园这种多个用 ...
- Oracle查询银行卡数、修改余额及验证登录
建立Oracle表 create table T_BANKCARD ( card_id VARCHAR2(20) not null, user_id VARCHAR2(20) not null, us ...
- thinkphp通行证服务,验证登录,注销登录
<?php /** * 通行证服务 */ class PassportService extends Service { /** * 验证用户或者管理员是否已登录 * @return boole ...
- 一步一步实现FormsAuthentic验证登录
本文不讲原理,只讲用法,原理性的东西网上特别多,不过还是会对一些要用到的东西进行解释,不深入讲原理.本文中用的是Vs2012 .net mvc 4.0.原理看这篇文章,看完这个文章绝对受益匪浅. ...
- JAVA短信验证登录
短信验证登陆 1.点击触发,以电话号码为参数调用发送验证登录短信方法 2.默认模板为验证模板 生成6位验证码 3.将生成的验证码和手机号码放入缓存,(已经设置好缓存存放时间) 4.调用发送模板短信方法 ...
- Scrapy中使用cookie免于验证登录和模拟登录
Scrapy中使用cookie免于验证登录和模拟登录 引言 python爬虫我认为最困难的问题一个是ip代理,另外一个就是模拟登录了,更操蛋的就是模拟登录了之后还有验证码,真的是不让人省心,不过既然有 ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十四║ Vuex + JWT 实现授权验证登录
壹周回顾 哈喽,又是元气满满的一个周一,又与大家见面了,周末就是团圆节了,正好咱们的前后端也要团圆了,为什么这么说呢,因为以后的开发可能就需要前后端一起了,两边也终于会师了,还有几天Vue系列就基本告 ...
- JSP+MySQL验证登录的实现方式
用IDEA连接MySQL验证登录实现方式核心部分代码 用setString的方法对从数据库中的提取的信息经行比对: try { Class.forName("com.mysql.jdbc.D ...
随机推荐
- MsSql 游标 修改字段两个表关联 表向另个表插入记录
-- 方法1:游标-- 声明变量DECLARE @SystemUserId AS UNIQUEIDENTIFIER -- 声明游标DECLARE C_SystemUser CURSOR FAST_FO ...
- java 字节流文件复制方法总结
1.使用字节流每次读写单个字节 public static void main(String[] args) throws IOException { FileInputStream fis = ne ...
- hive错误排查一:hive中执行 drop table命令卡住,删除表不成功
起因 公司用的AWS EMR上的hive,突然不能删除表了. 经过 分析来看,估计是元数据那块出了问题.从元数据入手,元数据存在mysql的hive数据库中 直接使用hive配置文件hive-site ...
- 论 Python Opencv 中文路径及中文文件名图像文件读取的两种方式
python 2中对于中文字符的处理可谓是诟病已久,虽然python 3 使用统一编码解决了中文字符串的问题,但在使用opencv中imread函数读取中文路径图像文件时仍会报错. 1) 借助nump ...
- Hystrix使用
Hystrix是Netflix开源的一款容错系统,能帮助使用者码出具备强大的容错能力和鲁棒性的程序.如果某程序或class要使用Hystrix,只需简单继承HystrixCommand/Hystrix ...
- 20155234 2016-2017-2 《Java程序设计》第3 周学习总结
20155234 2006-2007-2 <Java程序设计>第3周学习总结 教材学习内容总结 类是对象的设计图,对象是类的实例. 参考名称与对象数据成员同名时,可以在数据成员前使用thi ...
- 20155329胡佩伦《Java程序设计》第2周学习总结
学号 20155329 <Java程序设计>第2周学习总结 教材学习内容总结 基本类型 整数(short.int.long) 字节(byte) 浮点数(float/double) 字符(c ...
- swift 解决tableView的Y值偏移64问题
// 起始坐标按0点开始计算 self.edgesForExtendedLayout = UIRectEdge.init(rawValue: 0) // tableView的坐标系 tableView ...
- 【转载】OLE控件在Direct3D中的渲染方法
原文:OLE控件在Direct3D中的渲染方法 Windows上的图形绘制是基于GDI的, 而Direct3D并不是, 所以, 要在3D窗口中显示一些Windows中的控件会有很多问题 那么, 有什么 ...
- 1563: [NOI2009]诗人小G
1563: [NOI2009]诗人小G https://lydsy.com/JudgeOnline/problem.php?id=1563 分析: 直接转移f[i]=f[j]+cost(i,j),co ...