Django Rest Frameworkでログインするとlast_loginに更新日が入らない
Django Rest Frameworkを使っていて、アプリユーザーなどにログインしてもらった際にlast_login入ってないなぁと。
これは既知の問題で、last_loginはどうやら今のままでは入らないと。
wrapperを作成し、その中でlast_loginを更新
stackoverflowの通り、update_last_loginを使用してlast_loginを更新するwrapperクラスを作成しました。
from rest_framework.authtoken.models import Token
from rest_framework.authtoken.views import ObtainAuthToken
from django.contrib.auth.models import update_last_login
from rest_framework.response import Response
from rest_framework.status import HTTP_200_OK, HTTP_201_CREATED
def get_or_create_token(user):
token, created = Token.objects.get_or_create(user=user)
update_last_login(None, user)
return Response({'token': token.key},
status=HTTP_201_CREATED if getattr(user, 'is_new', False) else HTTP_200_OK)
class AuthTokenHandler(ObtainAuthToken):
def post(self, request):
serializer = self.serializer_class(data=request.data, context={'request': request})
if serializer.is_valid(raise_exception=True):
return get_or_create_token(serializer.validated_data['user'])
本来はAuthTokenHandlerクラスに更にserializerを追加して、SNSログインなども出来ているようにしていますが、こんな感じでget_or_create_token
内でlast_login
をアップデートするようにし、無事解決しました。