我使用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之前插入一个测试,以确定是否先前已为此用户创建了一个令牌。如果是这样,请执行我计划的模型实例创建。
这有更好的方法来解决这个问题吗?
答案 0 :(得分:0)
据我所知,这是处理这个问题的最佳场所。
原因是DRF目前没有令牌过期功能。因此,一旦使用上述类创建了一个令牌,它就不会消失。
这意味着如果用户首次登录,created
将返回True:
token, created = Token.objects.get_or_create(user=user)
因此,您只需在以下行测试created
并执行模型创建或其他必要的操作。
如果删除了令牌,可能需要额外的逻辑来处理这种情况。例如,如果您使用了创建的API注销方法,例如给定in this answer的方法。