问题描述
登录使用的flask_jwt封装好的login,获取当前用户信息用的以下代码,但是不知道如何实现注销用户
问题出现的环境背景及自己尝试过哪些方法
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
# jwt代码
user_info_dao = UserInfoDao()
jwt = JWT(app, user_info_dao.authenticate, user_info_dao.identity)
from flask_jwt import jwt_required, current_identity
# 获取当前用户信息用的以下代码
@bp_auth.route('/getuser',methods=['GET'])
@jwt_required()
def get_user_info():
user_info = current_identity.to_dict()
return json_result(True, u'获取当前用户信息成功',user_info)
不好意思~ jwt是不支持主动使用户token过期的。
要知道用户登录身份的校验,基本就两种:
①客户端存储一个随机串,发送请求时携带该串。服务器接收到之后拿着这个串去存储中做比对,找到对应的数据。
②将所有数据都存储到客户端。这样就有会安全问题,因为服务器无法确定那些数据是有效的,那些数据是伪造的。所以就引入了签名的概念。用算法的方式来保证数据的可信性。
早期的网站基本就一个主站,也没有分布式的部署。所以多数都采用第一种方式。
但随着访问量的增加,开始做分布式,就涉及到了session共享的问题。比如①中的存储,使用redis来达到共享数据的效果。但是这样会在服务器中存储大量的数据。
然后呢,就出来另外一种。不在服务器存储数据。其中一个就是jwt。
jwt在生成时,可以设置有效期。理论上 一个用户可以产生无数个jwt,且jwt的有效期独立。
如果你想将一个还在有效期内的jwt置为无效,那就必须要在服务器存储数据,这就违背了他的设计原则~
其实。他的退出,就是客户端主动将jwt扔掉(假设不会被其他人捡到)
~~~~~ 那么这个jwt不就不存在了吗~ 这不就完成注销功能了吗~