2016-11-29 52 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

相關問題