您的位置:首页 > 编程语言 > Python开发

使用 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')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: