登录用户并检查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"})
答案 0 :(得分:0)
在您的视图中(如果您使用的是Django< 1.10版本,正如@Kevin Christopher Henry在下面的评论中指出的那样),您需要这样做:
if request.user.is_authenticated():
如果你.is_authenticated
(没有括号),它将返回方法本身而不是布尔值(True
或False
),并且将始终评估为True
,或者至少它应该。我不确定为什么它会在你的情况下返回False
,但我认为这应该可以解决你的问题。
另外,请注意,在Django模板中,情况有所不同。在模板中,您可以(并且必须)执行:
{% if user.is_authenticated %}
请注意is_authenticated
后缺少括号。如果在模板案例中包含括号,则会出现错误,而如果不在视图中包含它们,则会出现意外结果。