我想记录用户在Django中访问我的/jwt/auth
端点的日期时间。我正在使用Djoser和django.contrib.auth.backends.ModelBackend
后端。
我尝试通过扩展身份验证后端来做到这一点,如下所示:
class CustomAuthenticationBackend(ModelBackend):
def __init__(self, *args, **kwargs):
print("hi mom")
super().__init__(*args, **kwargs)
def authenticate(self, request, username=None, password=None):
user = super().authenticate(request, username, password)
try:
if user and user.is_authenticated:
user.last_login = datetime.now()
user.save()
return user
except User.DoesNotExist:
return None
发生的事情是,从authenticate(...)
返回的user
是None
-所以当然我不能输入if语句。
我认为这是因为我发出的请求本身是未经身份验证的,因为它是一个auth请求,即使在获得响应的过程中,我们确实对用户进行了身份验证,或者至少验证了他们的JWT。
在此调用刷新期间,用户实际被引用的位置是哪里?我可以利用它来让用户更新我想要的吗?
1条答案
按热度按时间vxf3dgd41#
我在这里做的是解码jwt,在我们的例子中,它确实有一个用户ID。这对我来说是不优雅的,但它有效:
可以从请求中提取JWT。