我正在考虑允许用户撤销以前发布的令牌(是的,即使它们设置为在15分钟后过期),但是使用DRF-jwt找不到任何方法。
现在,我正在考虑几种选择:
上述任何一种方法都可以使用吗?
答案 0 :(得分:4)
我们在项目中这样做了:
将jwt_issue_dt
添加到用户模型。
将original_iat
添加到有效负载。因此令牌刷新不会修改此字段。
比较有效负载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
要撤消令牌,您只需更新字段user.jwt_issue_dt
。