使用 python 编写一个授权登录验证的模块
使用 python 编写一个授权登录验证的模块
我们编写的思路:
1、登录的逻辑:如果用户名和密码正确,就返回 token 。
2、生成 token 的逻辑,根据用户名,随机数,当前时间 + 2 小时
3、然后放在 users 中密码的后面,每次都不一样
4、验证 token 的步骤,取出以后,解码
得到用户名,去和 users 中的 token 比较,(只会和最近的 token 比较,之前的不比较,也就是之前的失效了)
然后再验证是否过期。
源代码:
from flask import Flask, request, redirect
import base64
import random
import time
app = Flask(__name__)
users = {
"liwei": ["123456"],
"zhouguang": ["888888"]
}
def getToken(uid):
s1 = ':'.join([str(uid), str(random.random()), str(time.time() + 7200)])
s2 = base64.b64encode(s1)
users[uid].append(s2)
print users[uid]
return s2
@app.route("/login", methods=['GET', 'POST'])
def login():
uid, pwd = base64.b64decode(request.headers['Authorization'].split(' ')[-1]).split(':')
if users[uid][0] == pwd:
return getToken(uid)
else:
return 'error'
return 'OK'
def verify_token(token):
_token = base64.b64decode(token)
if not users.get(_token.split(':')[0])[-1] == token:
return -1
if float(_token.split(':')[-1]) >= time.time():
return 1
else:
return 0
@app.route("/getResource", methods=['GET', 'POST'])
def getResource():
token = request.args.get('token')
print token
if verify_token(token) == 1:
return 'data'
else:
return 'error'
if __name__ == '__main__':
app.run()
关于源代码的说明:
导入这三个模块 from 和 import 分别是什么意思呢?
from flask import Flask, request, redirect
import random
import base64
import time
这句话比较重要,不要忘记了
app = Flask(__name__)
从请求头中获得数据应该这样写 [Authorization]
authorization = request.headers['Authorization'];
userAndPasswd = authorization.split(' ')[-1]
print userAndPasswd
user = base64.b64decode(userAndPasswd).split(":")[0]
passwd = base64.b64decode(userAndPasswd).split(":")[1]
键值对
users ={
"liwei":["123456"],
"zhouguang":["888888"]
}
说明:获取的时候 users["liwei"] 和 users.get("liwei") 都可以。
留意下面这种写法,同时赋值
uid,pwd = base64.b64decode(request.headers['Authorization'].split(' ')[-1]).split(':')
元组后面添加元素
users[uid].append(token)
字符串连接的方法,时间类
token = base64.b64encode(":".join([str(uid),str(random.random()),str(time.time() + 7200)]))
写一个占位符 pass
def verify_token(token):
pass
restful 风格的 url 这样写
@app.route("/index/<user>", methods=['POST'])
def hello_world(user):
print('hello %s' % user)
print request.headers
return '%s ,welcome' % user
重定向这样写,要记得引入 redirect 模块
@app.route("/client/login", methods=['POST', 'GET'])
def client_login():
uri = 'http://localhost:5000/oauth'
return redirect(uri)
获得请求参数
id = request.args.get('uid')
使用 python 编写一个授权登录验证的模块的更多相关文章
- Flask 编写一个授权登录验证的模块(一)
看一个关于授权登陆的简易模块,觉得挺不错,学习学习. 1.登录的逻辑:如果用户名和密码正确,就返回 token .2.生成 token 的逻辑,根据用户名,随机数,当前时间 + 2 小时3.然后放在 ...
- Flask 编写一个授权登录验证的模块(二)
本篇比上一篇多了重定向的功能 #!/usr/bin/env python # -*- coding: utf-8 -*- #python3 import base64 import random im ...
- 练习:python 操作Mysql 实现登录验证 用户权限管理
python 操作Mysql 实现登录验证 用户权限管理
- 用Python编写一个简单的Http Server
用Python编写一个简单的Http Server Python内置了支持HTTP协议的模块,我们可以用来开发单机版功能较少的Web服务器.Python支持该功能的实现模块是BaseFTTPServe ...
- 在phpWeChat中如何定义一个授权登录(获取昵称)的链接
在phpWeChat中如何定义一个授权登录(获取昵称)的超链接?使其点击后出现如下效果? 由于集成了这个功能,其实这个需要是很简单的. 假如您想在授权后跳转到http://www.baidu.com/ ...
- MFC+WinPcap编写一个嗅探器之五(过滤模块)
这一节主要介绍如何获设置捕获过滤,这里的过滤是指在捕获前过滤 设置捕获过滤主要是在CFilterDlg中完成,也就是对应之前创建的设置过滤规则对话框,如图: 首先要根据用户的选择来生成一个合法的过滤规 ...
- MFC+WinPcap编写一个嗅探器之四(获取模块)
这一节主要介绍如何获取设备列表,比较简单 获取设备列表主要是在CAdpDlg中完成,也就是对应之前创建的选择适配器模块,如图: 当打开选择适配器对话框后,在列表视图控件中显示当前主机所有适配器及适配器 ...
- MFC+WinPcap编写一个嗅探器之六(分析模块)
这一节是程序的核心,也是最复杂的地方 首先需要明白的一点是,一般对于一个有界面的程序来说,往往需要多线程.本程序中除了界面线程外,抓包需要另外创建一个新的线程.在写抓包函数之前,首先要将前面两个模块的 ...
- Python 编写一个有道翻译的 workflow 教程
最近使用有道翻译的 workflow 总是翻译不了,可能是 appKey 失效了或者超过调用上限,所以打算自己实现一个. 创建 workflow 打开 Alfred3 的 Preferences,选择 ...
随机推荐
- Java 8 Collectors 类的静态工厂方法
摘自<<Java 8 实战>> Collectors 类的静态工厂方法 工厂方法 返回类型 用于 toList List<T> 把流中所有项目收集到一个 List ...
- Jmeter4.0---- jmeter中写入java代码_简单了解(15)
1.说明 BeanShell:是一个小型嵌入式Java源代码解释器,具有对象脚本语言特性,能够动态地执行标准JAVA语法,并利用在JavaScript和Perl中常见的的松散类型.命令.闭包等通用脚本 ...
- 修正Calendar的Bug
procedure TAndroidNativeCalendarListener.onSelectedDayChange(view: JCalendarView; year, month, dayOf ...
- set 集合的函数调用
方法 意义 S.add(e) 在集合中添加一个新的元素e:如果元素已经存在,则不添加 S.remove(e) 从集合中删除一个元素,如果元素不存在于集合中,则会产生一个KeyError错误 S.dis ...
- 第一章、接口规范之Restful规范
阅读目录 2.1 数据的安全保障 2.2 接口特征表现 2.3 多数据版本共存 2.4 数据即是资源 2.5 资源操作由请求方式决定 3.1 正常响应 3.2 重定向响应 3.3 客户端异常 3.4 ...
- Spark中资源与任务的关系
在介绍Spark中的任务和资源之前先解释几个名词: Dirver Program:运行Application的main函数(用户提交的jar包中的main函数)并新建SparkContext实例的程序 ...
- 调查问卷WebApp
1. 效果演示 2. 主要知识点 使用slot分发内容 动态组件 组件通信 实例的生命周期 表单 3. 遇到的问题 bus 通信 第一次 $on 监听不到 // 解决bus 第一次通信 $on 监听不 ...
- 十八,helm的原理及基础使用
目录 helm介绍 核心术语 helm安装 helm安装 Tiller安装 创建tiller相关的rbac helm使用 添加chart源 helm常用命令: 基础命令 自定义chart 一.char ...
- Django上手体验,对比Asp.Net Core框架
一.前言 最近经常听说“人生苦短,我选python”这句话,处于好奇,笔者对python相关技术和web框架做了一番研究,本篇就对python web框架代表作Django和微软主打web框架Asp. ...
- ping不通github
Linux 下 host文件在 /etc/hosts Windows下 host文件在C:\Windows\System32\drivers\etc 在host文件的最后面加上: Linux sudo ...