我正在考虑允许用户撤销以前颁发的 token (是的,即使它们被设置为在 15 分钟后过期),但没有找到任何使用 DRF-jwt 这样做的方法。
现在,我正在考虑几种选择:
以上任何一条路都可以走吗?
最佳答案
我们在我们的项目中是这样做的:
将 jwt_issue_dt
添加到用户模型。
将 original_iat
添加到有效负载。所以 token 刷新不会修改这个字段。
比较来自有效载荷和 original_iat
的 user.jwt_issue_dt
:
from calendar import timegm
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
class CustomJSONWebTokenAuthentication(JSONWebTokenAuthentication):
def authenticate_credentials(self, payload):
user = super(CustomJSONWebTokenAuthentication, self).authenticate_credentials(payload)
iat_timestamp = timegm(user.jwt_issue_dt.utctimetuple())
if iat_timestamp != payload['iat']:
raise exceptions.AuthenticationFailed('Invalid payload')
return user
要撤销 token ,您只需要更新字段
user.jwt_issue_dt
。关于django - 使用 Django rest-framework-jwt 撤销 token ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42108046/