检测用户首次使用Django Rest Framework进行身份验证

时间:2016-11-29 06:41:05

标签: django authentication django-rest-framework

我使用DRF允许移动应用的用户对我的网络应用进行身份验证。

我想在用户第一次登录"时创建与此用户关联的模型实例。使用客户端。

我在DRF中使用基于令牌的身份验证,对于我的/ api / authenticate / endpoint,我指的是url(r'^authenticate/', restviews.obtain_auth_token),

似乎处理此问题的最佳方法是通过将此类添加到我的api / views.py来覆盖ObtainAuthToken(APIView)。这个类看起来像这样:

class ObtainAuthTokenCustomized(APIView):
    throttle_classes = ()
    permission_classes = ()
    parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
    renderer_classes = (renderers.JSONRenderer,)
    serializer_class = AuthTokenSerializer

    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.validated_data['user']
        token, created = Token.objects.get_or_create(user=user)
        return Response({'token': token.key})


obtain_auth_token = ObtainAuthTokenCustomized.as_view()

看起来我想在get_or_create之前插入一个测试,以确定是否先前已为此用户创建了一个令牌。如果是这样,请执行我计划的模型实例创建。

这有更好的方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

据我所知,这是处理这个问题的最佳场所。

原因是DRF目前没有令牌过期功能。因此,一旦使用上述类创建了一个令牌,它就不会消失。

这意味着如果用户首次登录,created将返回True:

token, created = Token.objects.get_or_create(user=user)

因此,您只需在以下行测试created并执行模型创建或其他必要的操作。

如果删除了令牌,可能需要额外的逻辑来处理这种情况。例如,如果您使用了创建的API注销方法,例如给定in this answer的方法。