使用 python 编写一个授权登录验证的模块
2017-05-01 16:50
951 查看
使用 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')
相关文章推荐
- 使用sqlite3的接口函数完成一个用户登录验证功能模块设计 要封装成独立函数,在独立的main中调用测试;
- 使用python编写一个登录接口
- 使用python编写一个监控使用内存并使用flask模块出图
- 关于使用HttpModule模块处理登录验证示例
- 使用Python编写一个简单的tic-tac-toe游戏的教程
- Python使用pygame模块编写俄罗斯方块游戏的代码实例
- 使用 Lua 编写一个 Nginx 认证模块 - 技术翻译 - 开源中国社区
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- 如何使用Python编写一个Lisp解释器
- 使用Python编写一个模仿CPU工作的程序
- 使用 Python 编写套接字应用程序 套接字和 SocketServer 模块
- 使用CAS登录模块连接数据库验证用户合法性
- 使用java编写SmartFoxServer自定义安全验证登录扩展
- python脚本初探---新手如何直接编写一个hello world模块即可执行的.py文件
- 使用Python编写一个在Linux下实现截图分享的脚本的教程
- 今天犯了一个很蠢的错误,有关python的模块包的使用的
- python脚本初探---新手如何直接编写一个hello world模块即可执行的.py文件
- 使用java编写SmartFoxServer自定义安全验证登录扩展
- python 文件处理模块使用,对一个文件追加写入
- 【python网络编程】使用rsa加密算法模块模拟登录新浪微博