首页 > 解决方案 > Django rest框架让用户保持登录状态

问题描述

我有一个支持登录功能的 APi,每当我将页面切换到索引页面时,用户此时不再登录,我不知道我做错了什么。

这是我对登录的看法

@csrf_exempt
@api_view(["POST", "GET"])
@permission_classes((AllowAny,))
def login(request):
    username = request.data.get("username")
    password = request.data.get("password")
    if username is None or password is None:
        return Response({'error': 'Please provide both username and password'},
                        status=HTTP_400_BAD_REQUEST)
    user = authenticate(username=username, password=password)
    if not user:
        return Response({'error': 'Invalid Credentials'},
                        status=HTTP_404_NOT_FOUND)
    request.session.save()
    return Response({'Success': 'Logged in'},
                    status=HTTP_200_OK)

这是索引页面的简单测试视图,我session.items()的为空白并request.user输出AnonymousUser

def test_view(request):
    print(request.session.items())
    print(request.user)
    return HttpResponse(request.COOKIES.keys())

在我的设置中我有

'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.BasicAuthentication',
    'rest_framework.authentication.SessionAuthentication',
),

标签: djangodjango-rest-framework

解决方案


验证后您必须对login()您的用户

user = authenticate(username=username, password=password)
if not user:
    . . .
login(request, user)

推荐阅读