提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
一、Token是什么?
二、使用步骤
1.引入库并配置token
2.登录返回token
3.请求验证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获取和验证,后面还需要有权限的验证等
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)