使用 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 编写一个授权登录验证的模块的更多相关文章

  1. Flask 编写一个授权登录验证的模块(一)

    看一个关于授权登陆的简易模块,觉得挺不错,学习学习. 1.登录的逻辑:如果用户名和密码正确,就返回 token .2.生成 token 的逻辑,根据用户名,随机数,当前时间 + 2 小时3.然后放在 ...

  2. Flask 编写一个授权登录验证的模块(二)

    本篇比上一篇多了重定向的功能 #!/usr/bin/env python # -*- coding: utf-8 -*- #python3 import base64 import random im ...

  3. 练习:python 操作Mysql 实现登录验证 用户权限管理

    python 操作Mysql 实现登录验证 用户权限管理

  4. 用Python编写一个简单的Http Server

    用Python编写一个简单的Http Server Python内置了支持HTTP协议的模块,我们可以用来开发单机版功能较少的Web服务器.Python支持该功能的实现模块是BaseFTTPServe ...

  5. 在phpWeChat中如何定义一个授权登录(获取昵称)的链接

    在phpWeChat中如何定义一个授权登录(获取昵称)的超链接?使其点击后出现如下效果? 由于集成了这个功能,其实这个需要是很简单的. 假如您想在授权后跳转到http://www.baidu.com/ ...

  6. MFC+WinPcap编写一个嗅探器之五(过滤模块)

    这一节主要介绍如何获设置捕获过滤,这里的过滤是指在捕获前过滤 设置捕获过滤主要是在CFilterDlg中完成,也就是对应之前创建的设置过滤规则对话框,如图: 首先要根据用户的选择来生成一个合法的过滤规 ...

  7. MFC+WinPcap编写一个嗅探器之四(获取模块)

    这一节主要介绍如何获取设备列表,比较简单 获取设备列表主要是在CAdpDlg中完成,也就是对应之前创建的选择适配器模块,如图: 当打开选择适配器对话框后,在列表视图控件中显示当前主机所有适配器及适配器 ...

  8. MFC+WinPcap编写一个嗅探器之六(分析模块)

    这一节是程序的核心,也是最复杂的地方 首先需要明白的一点是,一般对于一个有界面的程序来说,往往需要多线程.本程序中除了界面线程外,抓包需要另外创建一个新的线程.在写抓包函数之前,首先要将前面两个模块的 ...

  9. Python 编写一个有道翻译的 workflow 教程

    最近使用有道翻译的 workflow 总是翻译不了,可能是 appKey 失效了或者超过调用上限,所以打算自己实现一个. 创建 workflow 打开 Alfred3 的 Preferences,选择 ...

随机推荐

  1. grpc的demo

    一 grpc的为什么比http快? 1- 用Proto Buffer 作为序列化工具 2- 采用http2协议,头部压缩,多路复用 3- 基于netty的IO框架 二 grpc的demo A lib工 ...

  2. arcgis js 之 渔网工具(调用地图服务)

    arcgis js 之 渔网工具(调用地图服务) 原理: 简历不同级别的网渔网图层,设置显示比例尺.然后发布服务,使用MapImageLayer接收. 过程: 1.在arcmap中用创建渔网工具将不同 ...

  3. python面向对象:组合、封装、property装饰器、多态

    一.组合二.封装三.property装饰器四.多态 一.组合 ''' 1. 什么是组合 一个对象的属性是来自于另外一个类的对象,称之为组合 2. 为何用组合 组合也是用来解决类与类代码冗余的问题 3. ...

  4. 12_Hive实战案例_累计报表_级联求和

    注:Hive面试题:累积报表 数据文件: 有如下访客访问次数统计表 t_access_times 需要输出报表:t_access_times_accumulate 实现步骤: 创建表,并将数据加载到表 ...

  5. 跟着我一步一步的搭建一个基于springcloud的微服务实例

    Table of Contents generated with DocToc microservicecloud 插件推荐 建立父工程Microservicecloud 搭建Employ员工服务 创 ...

  6. git的安装和简单使用

    目前windows版本的git有几种实现,但我们选择msysgit发行版,这是目前做得兼容性最好的. 下载地址: http://code.google.com/p/msysgit/downloads/ ...

  7. django国际化的简单设置

    设置国际化的具体步骤: 一.国际化 1)效果:针对不同的国家的人可以配置不同的语言(一般是英文和中文,  English  Chinese) 2)目的:增加项目的用户量 3)难度:不难 比较费劲的就是 ...

  8. golang map多层嵌套使用及遍历方法汇总

    原文:https://blog.csdn.net/boyhandsome7/article/details/79734847 ------------------------------------- ...

  9. Python项目列表

    70个Python项目列表: 1.[Python 图片转字符画]2.[200行Python代码实现2048]3.[Python3 实现火车票查询工具]4.[高德API+Python解决租房问题 ]5. ...

  10. 2.Locust 跑起来试试

    代码 from locust import HttpLocust, TaskSet, task class UserBehavior(TaskSet): @task def baidu(self): ...