项目背景
后端使用flask框架,使用jwt签发token的方式进行用户验证,前端使用的是vue
需求
管理员对一个正在使用网站的用户进行了账户删除的操作,此时若用户继续在网站进行操作,应给出账户被删除的操作并跳转至登录页面。
实现方案
在后端定义了一个已删除用户的列表,当网站初始化时,该列表为空。在管理员进行删除操作之后,将被删除用户的ID存进已删除用户的列表中。
定义一个请求过滤器,客户端的每次请求都要进行验证,确认该用户不在已删除用户的列表中。
过滤器代码如下:
@app.before_request
def check_delete():
@jwt_required
def getClaims():
claims = get_jwt_claims()
return claims
if request.endpoint not in filter_exception_list:
claims = getClaims()
if claims:
if claims.get('user_id') in delete_user_list:
return jsonify({"msg":"您的账号已被删除,请联系系统管理员确认情况!"}), 422
其中filter_exception_list
是未登录的情况下访问的接口的endpoint集合。
user_id
是在用户登录、签发token是存储的一个属性,对应的是用户id。
这个过滤器的效果是在用户登陆的情况下,如果账号被删除,用户的id会存在delete_user_list
中,在用户下一次请求到来的时候,经过判断会返回给客户端一个422的错误码。
前端代码