2016-11-29 56 views
0

我正在使用DRF允许我的移动应用程序的用户对我的Web应用程序进行身份验证。检测第一次用户使用Django Rest Framework进行身份验证

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

我使用的DRF基于令牌的认证,为我/ API /认证/端点我指着url(r'^authenticate/', restviews.obtain_auth_token),

好像来处理这一点的最好办法是重写ObtainAuthToken(APIView) ,通过将此类添加到我的api/views.py中。这个类看起来是这样的:

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对于是否令牌已为此用户先前创建之前的测试。如果是这样,请执行我计划的模型实例创建。

这是否有更好的方法来处理这个问题?

回答

0

从我可以告诉这是处理这个最好的地方。

原因是DRF当前没有令牌过期能力。所以一旦用上面的类创建了一个令牌,它就不会消失。

这意味着created将返回True,如果它是用户的第一次登录:

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

因此你只需在下面的行测试created和执行模型创建或其他必要行动。

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

相关问题