登录 | 生成JWT | 保持状态

标题

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的作用, 是用来状态保持的
            }
        })


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值