LoginSignup
1
3

More than 3 years have passed since last update.

DjangoのAbstractUserモデルにlast_loginが用意されているのにアップデートされない

Posted at

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をアップデートするようにし、無事解決しました。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3