request.user.is_authenticated始终返回false

时间:2016-09-04 15:08:21

标签: django django-authentication

登录用户并检查request.user是否在android中的其他活动中进行了身份验证。值总是假的。

以下代码用于登录用户

from rest_framework.response import Response
from rest_framework import status
from rest_framework.decorators import api_view
from django.contrib.auth.models import User
from django.contrib.auth import authenticate,logout,login


@api_view(['POST'])
def userRegister(request):
    user=User.objects.create_user(username=request.POST['username'],email=request.POST['email'],password=request.POST['password'])
    return Response({'ok':'True'},status=status.HTTP_201_CREATED)

@api_view(['POST'])
def userLogin(request):
    user=authenticate(
        username=request.POST['username'],
        password=request.POST['password']
    )
    if user is not None:
        login(request,user)
        return Response({'ok':'True'},status=status.HTTP_200_OK)
    else:
        return Response({'ok':'False'},status=status.HTTP_401_UNAUTHORIZED)

以下代码用于检查用户是否经过身份验证

from rest_framework.response import Response
from rest_framework.decorators import api_view
from . import models
from . import serializers
from django.contrib.auth.models import User
from rest_framework import status


@api_view(['GET'])
def HomeView(request):
    if request.user.is_authenticated:
        return Response(data={"ok":'true'})
    else:
        return Response(data={"ok":"false"})

1 个答案:

答案 0 :(得分:0)

在您的视图中(如果您使用的是Django< 1.10版本,正如@Kevin Christopher Henry在下面的评论中指出的那样),您需要这样做:

if request.user.is_authenticated():

如果你.is_authenticated(没有括号),它将返回方法本身而不是布尔值(TrueFalse),并且将始终评估为True ,或者至少它应该。我不确定为什么它会在你的情况下返回False,但我认为这应该可以解决你的问题。

另外,请注意,在Django模板中,情况有所不同。在模板中,您可以(并且必须)执行:

{% if user.is_authenticated %} 

请注意is_authenticated后缺少括号。如果在模板案例中包含括号,则会出现错误,而如果在视图中包含它们,则会出现意外结果。