ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Flask 用户认证token,验证Token

2022-06-15 14:01:30  阅读:158  来源: 互联网

标签:None return Flask token Token data id def


生成Token,验证Token代码如下:

from itsdangerous import TimedJSONWebSignatureSerializer as Serializer, SignatureExpired, BadSignature
from config import BaseConfig
from flask import request, jsonify
from functools import wraps
from db_connect import db_select


# 生成token, 有效时间为24小时
def generate_token(id, username=None, expiration=86400):
    serializer = Serializer(BaseConfig.SECRET_KEY, expires_in=expiration)
    data = {'id': id, 'username': username} if username is not None else {}
    return serializer.dumps(data)


# 解析token
def verify_token(token):
    serializer = Serializer(BaseConfig.SECRET_KEY)
    # token正确
    try:
        data = serializer.loads(token)
        return data
    # token过期
    except SignatureExpired:
        return None
    # token错误
    except BadSignature:
        return None
    # token无值
    except Exception as e:
        return None


# 获取登录用户id
def get_user_id():
    token = request.headers.get('Authorization')
    data = verify_token(token)
    id = data["id"]
    return id


def login_required(func):
    """登录校验装饰器
    :param func:函数名
    :return: 闭包函数名
    """
    @wraps(func)
    def decorated(*args, **kwargs):
        token = request.headers.get('Authorization', None)
        if verify_token(token):
            return func(*args, **kwargs)
        return jsonify({'code': 401, 'msg': '登录过期,请重新登录!'})
    return decorated

# 判断是否为管理员
def is_admin(user_id):
    admin_sql = f"SELECT tg.name FROM tb_users tu \
                  LEFT JOIN tb_groups tg \
                  ON tu.group_id=tg.id \
                  WHERE tu.id={user_id}"
    auth_type, auth_name = db_select(admin_sql)
    if auth_type[0][0] != "管理员":
        return True
    else:
        return False

 

标签:None,return,Flask,token,Token,data,id,def
来源: https://www.cnblogs.com/yyf993/p/16378203.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有