目录
下面的配置放在xxx.py文件中,而且conf文件夹是一个python的包文件,在IDEA中的图标是
COOKIE_EXPIRATION = 30 * 24 * 3600 # 秒(到期浏览器自动删除)
TOKEN_EXPIRATION = 30 * 24 * 3600 # 秒(到期报错SignatureExpired)
USERNAME = 'zhangsan'
PASSWORD = 'lisi'
SECRET_KEY = 'k#6@1%8)a'
from flask import request, jsonify, Flask, make_response, flash
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer, BadSignature, SignatureExpired
from flask_httpauth import HTTPBasicAuth
from commonUtils import _get_parameters
app = Flask(__name__)
app.config.from_object('conf.secure') # 注意这里的路径要相对于flask核心对象的__name__来写相当路径
app.config.from_object('conf.setting')
auth = HTTPBasicAuth()
@app.route('/generate_token')
def generate_auth_token():
"""生成token令牌"""
s = Serializer(app.config['SECRET_KEY'], expires_in=app.config['TOKEN_EXPIRATION'])
temp = s.dumps({app.config['USERNAME']: app.config['PASSWORD']})
# date = datetime.datetime.today() + datetime.timedelta(days=app.config['COOKIE_EXPIRATION'])
response = make_response()
response.set_cookie(temp, '', max_age=app.config['COOKIE_EXPIRATION'])
return response # eyJhbGciOiJIUzUxMiIsImlhdCI6MTU1MDIxNDUzNiwiZXhwIjoxNTUyODA2NTM2fQ.eyJpZCI6InpoYW5nc2FuIn0.c30V7Cid1_5s5QAj9-cQCDmLg1xbup41PsY99iVtX2D52r_we7cvja7KOl0MOILjWTQ3M3FlhBO6TgIwFI_H5g
@auth.verify_password
def verify_auth_token(token, password): # 注意只能两个参数
"""验证token"""
s = Serializer(app.config['SECRET_KEY'])
try:
data = s.loads(token) # {'id': 'zhangsan'}
except SignatureExpired:
raise SignatureExpired('令牌已过期')
except BadSignature:
raise BadSignature('令牌不合法')
if data.get(app.config['USERNAME']) == app.config['PASSWORD']:
return True
else:
return False
@app.route('/')
@auth.login_required # 通过Authorization value=token:''
def index():
return "hello"
1、网站的用户登录流程:
- 在网页中登录需要提供用户的身份信息(账号、密码)然后发送到网页后端之后,如果网页后端验证账号密码是正确的,它将把一个票据写入到cookie中,最后再把这个cookie返回到浏览器中,并且由浏览器存储住这个cookie,那么下一次我们使用浏览器访问我们的网站的时候呢,就不在需要登录了,因为浏览器有存储我们用户的票据,这个票据就是用户的一个身份标识,只要携带这个票据网页就会认为此次访问是合法的。
2、API的用户流程:
API的访问流程和网页是差不多的,不一样的是,第一我们不一定是使用网页去访问API,我们可以由小程序app甚至是Postman都可以去访问API,其次我们不一定是由浏览器去访问的,所以不一定有cookie,我们就没办法把票据保存在cookie中了。
和右边是差不多的,唯一的区别在API验证了用户的账号和密码之后,它会返回一个token,token我们叫做令牌,令牌简单理解呢就是一个加密的字符串,那么API把令牌返回给我们的客户端之后,客户端要做的一个事情就是,他必须自己去管理和存储这个token,不在是像我们之前利用浏览器的cookie的机制来存储用户的身份了。客户端存储令牌的方式有很多种,根据不同的客户端机制有不同的存储方式,比如我们的小程序就是把token存储在storag