检查用户是否使用django TokenAuthentication

时间:2017-11-08 16:00:02

标签: python django django-rest-framework django-views

我正在尝试使用TokenAuthentication开发带有DRF的REST API。这将用于Android应用程序。

我能够对用户进行身份验证并检索它的令牌。我现在遇到的问题是以下观点:

@csrf_exempt
def foo(request):
    if request.method == 'GET':
        if request.user.is_authenticated():
            ...
            do stuff
            ...
            return HttpResponse(data, "application/json")
        else:
            return HttpResponse(status=401)

基本上应该对用户进行身份验证以便接收数据,否则,他将收到401响应。

我正在使用标题中的以下参数向正确的URL发出GET请求:

content-type : application/json
authorization : Token <user token>

基本上我正在为其他 Viewsets (这不是一个Viewset)做的事情 - 而且它有效。

在这种情况下,它总是发送带有401代码的HTTP响应(用户未经过身份验证)。

我无法弄清楚问题是否是我传递的Header值,或者这不是检查用户是否经过身份验证的正确方法。

编辑:如果我这样做:“print request.user”我得到AnonymousUser

谢谢!

解决

根据“ABDUL NIYAS P M”的建议,我使用了APIView

基本上,我刚刚将 @api_view(['GET'])装饰器添加到视图中。

@csrf_exempt
@api_view(['GET'])
@permission_classes((IsAuthenticated, ))
def foo(request):
    if request.method == 'GET':
        ...

1 个答案:

答案 0 :(得分:0)

一种更简单的方法是检查用户会话是否存在。

DRF创建令牌时,还会创建会话cookie。

return HttpResponse(json.dumps({"is_authenticated": True if request.session.get('_auth_user_id', 0) else False}),
                            content_type='application/json')