Flask后端 Token的使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档



一、Token是什么?

在计算机身份认证中是令牌(临时),在我的认知里面,token类似于打开后端的钥匙,在你登录之后,后端给你一串钥匙,你可以根据这串钥匙访问后端一些上锁的地方,如果没上锁,就是公共访问区域,没有token也能访问,有些地方上锁了你没钥匙,就是你的token里没有给你相对应的权限钥匙。


二、使用步骤

首先是创建一个token_core类。


1.引入库并配置token


from itsdangerous import TimedJSONWebSignatureSerializer as Serializer#导入
'''
这里的token_config.SECRET_KEY其实就是一段任意字符串
而expires_in是token的过期时间已秒为时间单位
'''
t = Serializer(token_config.SECRET_KEY, expires_in=2592000)#配置token



2.登录返回token

'''
登录产生token,参数根据自己需求添加,我这里只添加了用户名,其余暂定为空。
token本身应该还要包含角色权限
我这里是将token保存到redis数据库中
错误代码自定义
'''
#登录产生token
def login_token(userphone):
    user = {
        "userPhone": userphone,
        'userPermission': '',
        'userRole': '',
    }
    #存入redis
    try:
        //这里其实就是redis的hset 不过我因需求加了一重判断,所以封装成新的方法
        redisHset(n = userphone,k="token_userinfo",v=json.dumps(user))

    except:
        //output就是封装好的response
            return output( msg='token产生错误',code="20003")
    
    return t.dumps(user).decode('utf-8')

3.请求验证token的装饰器

#验证token是否登录
def login_required(func):
    @wraps(func)
    def verify_token(*args,**kwargs):
        try:
            #前端需要把token放在请求的header里面,然后后端在请求头上拿到token
            token = request.headers["userToken"]
        except Exception:
            #获取不到就返回 token空错误
            return output(msg = 'token为空',code="20001")
        #解析token,若token解析成功但是时间过期了则返回token过期
        try:
            a = t.loads(token)

        except Exception:
            return output(msg = "token已经过期",code="20002")
        #解析token成功且未过期,则验证是否存在redis内,若存在则允许执行,否则返回非法访问
        #get_userinfo是我再封装的redis的get方法

        if get_userinfo(a['userPhone'],'token_userinfo') is None:

            return output(msg="非法访问",code='20004')

        return func(*args,**kwargs)

    return verify_token


总结

这里只是简单的token获取和验证,后面还需要有权限的验证等

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小周bb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值