标题
1.思路
1.创建一个utile
文件Jwttoken.py
进行封装
import jwt # pip install pyjwt
from settings.config import *
from flask import current_app
import time
class JwtTool():
"""
jwt 管理
"""
# 生成jwt
def create(self, payload, ex=3600): # 一小时3600秒
'''
生成jwt
:param payload: 载荷
:return: string jwt
'''
# ex默认是一个小时
payload['exp'] = int(time.time()) + ex # 如果是exp的话会自动校验 我们需要的是手动校验
secret_key = current_app.config.get('SECRET_KEY')
# encode是生成jwt
token = jwt.encode(payload, secret_key, algorithm='HS256')
print(token)
return token
# 解码jwt
def valid(self, token): # 校验要传一个token参数
"""
校验jwt
:param token: jwt
:return:
"""
# 验证jwt
try:
secret_key = current_app.config.get('SECRET_KEY')
# decode是解码jwt
payload = jwt.decode(token, secret_key, algorithms='HS256')
# if payload['ex_time'] < int(time.time()):
# return '过期了'
return payload
except Exception as e:
print(e)
return False
if __name__ == '__main__':
from app import app
with app.app_context():
j = JwtTool()
jwt_token = j.create({
"aaa": "bbb"
})
a = j.valid(jwt_token)
print(a)
蓝图
# 用户
class UserView(Resource):
# 获取用户信息
@login
def get(self):
uid = g.uid
# 获取用户名的id
user_info = UserModel.query.get(uid)
print(user_info) # 返回<UserModel 1>
url = current_app.config.get('QINIU_URL')
return jsonify({
"code": 200,
"msg": "用户信息获取成功",
"data": {
"username": user_info.username,
"img": url + user_info.img
}
})
# 登录
def post(self):
# 获取参数
req = reqparse.RequestParser()
req.add_argument("phone", required=True)
req.add_argument("code", required=True)
# 校验参数
args = req.parse_args()
# 校验验证码是否正确
# 先连接数据库
# s = SmsTool()
# # 根据手机号拿出对应的验证码
# key = 'sms_%s' % args['phone']
# code_byte = s.rds.get(key) # 返回的类型是byte类型
# if not code_byte:
# return jsonify({
# 'code': 400,
# 'msg': '验证码过期'
# })
#
# # 比对
# if args['code'] != code_byte.decode():
# return jsonify({
# 'code': 400,
# 'msg': '验证码错误'
# })
# 查看数据库中是否有用户信息
user_info = UserModel.query.filter(UserModel.mobile == args['phone']).first()
print("1111111",user_info)
if not user_info:
# 如果没有就注册
# 将用户信息插入数据库
u = UserModel(mobile=args['phone'], username='游客%s' % args['phone'][-4:])
db.session.add(u)
db.session.commit()
# 如果有,直接登录
user_info = UserModel.query.filter(UserModel.mobile == args['phone']).first()
print("2222",user_info)
# 使用jwt状态保持
token = JwtTool().create({
'user_uid': user_info.uid,
'username': user_info.username,
})
# 如果有就登录
# 返回用户信息,返回jwt
return jsonify({
'code': 200,
'msg': '登录成功',
"data": {
"username": user_info.username,
"token": token # Token的作用, 是用来状态保持的
}
})