-
数据加密-sha1
import hashlib pwd='a123456' temp=hashlib.sha1(pwd.encode()) print(temp.hexdigest())
-
hash加盐加密
from werkzeug.security import generate_password_hash,check_password_hash def password_hash(str): method = 'pbkdf2:sha1:2000' salt_length = 8 str_encode = generate_password_hash(str, method=method, salt_length=salt_length) return str_encode def check_password(old_str_hash, new_str): res = check_password_hash(old_str_hash, new_str) return res if __name__ == '__main__': encodestr = password_hash('123') print(encodestr) print(check_password(encodestr, '123'))
-
JWT基础
JWT(Json web token) 是为了网络应用环境间传递声明而执行的一种基于JSON的开发标准(RFC 7519)
流程:1. 用户使用用户名、密码请求服务器 2. 服务器验证用户信息 3. 服务器通过验证发送给用户一个token 4. 客户端存储token,并在每次请求时附加这个token值 5. 服务器验证token,并返回数据,这个token必须要在每次请求时发送给服务器,它应该保存在请求头中,另外,服务器要支持CORS(跨来源资源共享)策略,一般我们在服务端这么做就可以了 Access-Control-Allow-Origin:*
JWT字符串组成:头部(headers) . 载荷(payload) . 签证(signature) 【头部保存声明信息,base64加密;载荷保存有效信息option,base64加密;签证由加密后的headers、加密后的payload、secret组成,然后加密】
-
安装
pip install pyjwt -i https://pypi.tuna.tsinghua.edu.cn/simple
-
封装token的生成和验证
service / utils / token_tool.py
import jwt from datetime import datetime,timedelta # 私钥 SECRET_KEY = '2019-8-9' # 过期时间 EXPIRE = 180 def make_token(id): datetimeInt = datetime.utcnow() + timedelta(seconds=EXPIRE) # 载荷 option = { "iss": "test.com", # token签发者 "exp": datetimeInt, # 过期时间 "iat": datetime.utcnow(), "aud": "webkit", "id": id } token = jwt.encode(option, SECRET_KEY, 'HS256') return token def check_token(token): id = None try: decoded = jwt.decode(token, SECRET_KEY, audience='webkit', algorithms=['HS256']) id = decoded.get('id') except jwt.ExpiredSignatureError as ese: print(ese) except Exception as ex: print(ex) finally: return id
-
利用token_tool.py对用户进行验证
service/user_service.py : login时调用make_token进行token的生成;show时利用装饰器调用check_token进行token的验证
@user.route('/login/', methods = ['GET', "POST"]) def login(): if request.method == 'GET': return 'get...login...' else: user = request.get_json() if user.get('telephone') == '15712345678': if user.get('password') == '123456': token = make_token(user.get('telephone')) return status_code["login_success"],200,{"token":token} else: return status_code["password_error"] else: return status_code["user_none"] @user.route('/show/') @check_login def show(): uid = request.args.get('id') return '欢迎{}用户登录成功'.format(uid)
service/decorate/check_user.py :成功则返回,失败则跳转
from functools import wraps from flask import request,redirect from app.service.utils.token_tool import check_token def check_login(func): @wraps(func) def wrapper(): print('check..is..ok...') token = request.headers.get('token') id = check_token(token) # print(id) if id: return func() else: return redirect('/user/login/') return wrapper
Flask学习-4-server对象(token)
最新推荐文章于 2025-03-12 00:15:00 发布
