django - 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',
),
解决方案
验证后您必须对login()
您的用户
user = authenticate(username=username, password=password)
if not user:
. . .
login(request, user)
推荐阅读
- javascript - 找出哪个键盘在javascript中生成了一个键事件
- graphql - 将 Apollo 客户端或同构 Fetch 与 GraphiQL 结合使用
- python-3.x - if 语句 get 被跳过,而只有 else 语句 get 被打印。我如何将字符串或 int 存储在单个变量中?
- python - 使用 request.session 填充 django 表单
- html - VBA Excel 运行时错误 438 / getElementbyClassName
- react-native - React native 中的平面纸阴影,如何实现?
- kotlin - 为什么使用while循环抛出未解决的引用错误,而for循环在kotlin中运行良好
- unity3d - 检查 Google Play 收据是否足以统一我的播放器偏好数据?
- javascript - 循环导入函数返回的数组?
- docker - POD 定义 - 部署到 DC/OS