检测用户首次使用 Django Rest Framework 进行身份验证
Posted
技术标签:
【中文标题】检测用户首次使用 Django Rest Framework 进行身份验证【英文标题】:Detect first time user has authenticated using Django Rest Framework 【发布时间】:2017-04-13 01:28:24 【问题描述】:我正在使用 DRF 来允许我的移动应用程序的用户对我的网络应用程序进行身份验证。
我想在用户第一次使用客户端“登录”时创建一个与该用户关联的模型实例。
我在 DRF 中使用基于令牌的身份验证,对于我的 /api/authenticate/ 端点,我指向 url(r'^authenticate/', restviews.obtain_auth_token),
似乎处理这个问题的最好方法是通过将这个类添加到我的 api/views.py 来覆盖获取AuthToken(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】:据我所知,这是处理此问题的最佳场所。
原因是 DRF 目前没有令牌过期功能。因此,一旦使用上述类创建了令牌,它就不会消失。
这意味着created
将在用户第一次登录时返回 True:
token, created = Token.objects.get_or_create(user=user)
因此,您只需在以下行测试 created
并执行模型创建或其他必要的操作。
如果令牌被删除,可能需要额外的逻辑来处理情况。例如,如果您使用创建了一种 API 注销方法,例如给定的in this answer。
【讨论】:
以上是关于检测用户首次使用 Django Rest Framework 进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章
首次成功调用 REST 后,未验证 HttpClient 上的凭据
如何使用 Simple JWT(django rest)将 JWT 令牌列入黑名单?
使用 Django-rest-auth 创建新用户时创建自定义用户模型