gpt4 book ai didi

python - Flask RESTful 销毁用户 token

转载 作者:行者123 更新时间:2023-11-28 18:40:21 25 4
gpt4 key购买 nike

我正在设置一个 Flask-RESTful 服务并让用户身份验证正常工作。我使用的方法是:

def generate_auth_token(username, expiration=600):
gen_serial = Serializer(secret_key, expires_in=expiration)
return gen_serial.dumps({'username': username})

我按如下方式将 token 传递给用户:

class token(Resource):
decorators = [auth.login_required]
def post(self):
username = g.user
return_token = generate_auth_token(username)
return {'token':return_token.decode()}, 200

然后验证 token ,这样它就不需要存储在服务器端:

def verify_auth_token(auth_token):
serial = Serializer(secret_key)
try:
data = serial.loads(auth_token)
except SignatureExpired:
return None
except BadSignature:
return None
serial_user = data['username']
return serial_user

这似乎运作良好,但我不确定如何在到期之前注销用户而不存储 token 服务器端。我的想法是在用户选择注销时传回一个垃圾 token ,但我认为这不是一个优雅或安全的解决方案。

任何提示都会非常有帮助!

最佳答案

而不是垃圾 token 简单地不编码数据:

def generate_auth_token(username=None, expiration=600):
gen_serial = Serializer(secret_key, expires_in=expiration)
data = {'username': username} if username is not None else {}
return gen_serial.dumps(data)

然后你可以有一个 invalidate 端点,它需要登录并返回一个没有用户名的 token :

def invalidate(self):
return_token = generate_auth_token()
return {'token':return_token.decode()}, 200

此时,您只需处理可能缺少的用户名字段即可:

def verify_auth_token(auth_token):
serial = Serializer(secret_key)
try:
data = serial.loads(auth_token)
except SignatureExpired:
return None
except BadSignature:
return None
serial_user = data.get('username')
return serial_user

关于python - Flask RESTful 销毁用户 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26999791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com