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的更多相关文章

  1. flask验证登录学习过程(1)---准备

    对应flask的接口开发,目前自己可以熟练的进行.但是深入到更基础的,从注册到验证登录的过程一直不是特别清楚. 趁着年度不是特别忙的时候,特意去学习加强一下.把这个过程记录在此处. 首先是规划一个项目 ...

  2. python验证登录

    一个web2.0时代的网站,自然少不了用户注册,登录,验证的功能,那么python可以怎样实现登录验证呢 这里我们使用装饰器来做登录验证 网站构成 假设我们有这样一个网站,是一个类似与博客园这种多个用 ...

  3. Oracle查询银行卡数、修改余额及验证登录

    建立Oracle表 create table T_BANKCARD ( card_id VARCHAR2(20) not null, user_id VARCHAR2(20) not null, us ...

  4. thinkphp通行证服务,验证登录,注销登录

    <?php /** * 通行证服务 */ class PassportService extends Service { /** * 验证用户或者管理员是否已登录 * @return boole ...

  5. 一步一步实现FormsAuthentic验证登录

    本文不讲原理,只讲用法,原理性的东西网上特别多,不过还是会对一些要用到的东西进行解释,不深入讲原理.本文中用的是Vs2012   .net mvc 4.0.原理看这篇文章,看完这个文章绝对受益匪浅. ...

  6. JAVA短信验证登录

    短信验证登陆 1.点击触发,以电话号码为参数调用发送验证登录短信方法 2.默认模板为验证模板 生成6位验证码 3.将生成的验证码和手机号码放入缓存,(已经设置好缓存存放时间) 4.调用发送模板短信方法 ...

  7. Scrapy中使用cookie免于验证登录和模拟登录

    Scrapy中使用cookie免于验证登录和模拟登录 引言 python爬虫我认为最困难的问题一个是ip代理,另外一个就是模拟登录了,更操蛋的就是模拟登录了之后还有验证码,真的是不让人省心,不过既然有 ...

  8. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十四║ Vuex + JWT 实现授权验证登录

    壹周回顾 哈喽,又是元气满满的一个周一,又与大家见面了,周末就是团圆节了,正好咱们的前后端也要团圆了,为什么这么说呢,因为以后的开发可能就需要前后端一起了,两边也终于会师了,还有几天Vue系列就基本告 ...

  9. JSP+MySQL验证登录的实现方式

    用IDEA连接MySQL验证登录实现方式核心部分代码 用setString的方法对从数据库中的提取的信息经行比对: try { Class.forName("com.mysql.jdbc.D ...

随机推荐

  1. Html5 Canvas 实现图片合成

    多个图片合成一张 <!doctype html> <html> <head> <meta charset="utf-8"> < ...

  2. ajaxSubmit请求返回数据成功,但是不执行success回调函数

    最近项目涉及到附件上传就头痛,一直在用plupload插件在做...ie9偶尔抽风但还是可以的... 然后有个需求,表格每行都有个上传按钮,页面多上传按钮. 一.开始的时候,用plupload做的,多 ...

  3. Delphi判断某个类是否实现了某个接口

    通过TObject.GetInterface可以获得对象的实例实现某个接口,前提条件是必须实例化对象后才能运行GetInterface 下面的方法可获取类是否实现了某个接口,并返回接口的偏移: fun ...

  4. spark or sparkstreaming的内存泄露问题?

    关于sparkstreaming的无法正常产生数据---->到崩溃---->到数据读写极为缓慢(或块丢失?)问题 前两阶段请看我的博客:https://www.cnblogs.com/wa ...

  5. Linux下C语言编译的问题

    在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误: (.text+0x13): undefined reference to `func' 关于undefi ...

  6. 20155226 2016-2017-2 《Java程序设计》第4周学习总结

    20155226 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 继承(extends): 1.作用:提高代码复用性 让类与类产生了关系,有了这个关系才有了多 ...

  7. 20155313 2016-2017-2 《Java程序设计》第四周学习总结

    20155313 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 6 继承与多态 面对对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就 ...

  8. # C语言假期学习笔记——6

    C语言假期学习笔记--6 数组 主要学习了一位数组和二维数组. 数组是一组具有相同类型的变量的集合.C语言程序通过元素的下标来访问数组中的元素.(下标从0开始) 一位数组 类型 数组名[元素个数] 二 ...

  9. [BZOJ1857][SCOI2010]传送带-[三分]

    Description 传送门 Solution 三分套三分.代码简单但是证明苦兮兮.. 假如我们在AB上选了一个点G,求到该点到D的最小时间. 图中b与CD垂直.设目前从G到D所耗时间最短的路径为G ...

  10. 解决非controller使用,@Autowired或者@Resource注解注入Mapper接口为null的问题

    知识点:在service层中注入其它的service接口或者mapper接口都是可以的 但是在封装的Utils工具类中或者非controller普通类中使用@Autowired@Resource注解注 ...