首页 > 解决方案 > Django会话身份验证有时会失败

问题描述

我在会话身份验证方面遇到了非常奇怪的问题。

我在 DRF API 上对一些遗留的 django 视图使用会话身份验证。并使用 DRF 和 react 应用程序实现登录过程。登录的服务器代码如下所示:

class AuthViewSet(viewsets.ViewSet):

    def create(self, request, *args, **kwargs):
    is_session_auth = request.data.get('session_auth', False)

    serializer = self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    token = serializer.save()

    if is_session_auth is True:
        login(request, token.user)

    return Response(dict(token=token.key))

所以,正如我所料,响应应该有set-cookie让浏览器设置sessionidcsrftokencookie的标题。它在大多数情况下都运行良好。

但很少有一些用户遇到登录失败的情况。我无法重现它,但这就是他们所描述的:

  1. 当用户提交登录表单时,请求发送到服务器并成功得到响应。
  2. 然后 javascript 应用程序将 url 推送到login/complete,如预期的那样。
  3. 但在登录完整视图中,请求未能通过身份验证。并且视图将请求重定向到原始登录视图。
  4. 用户重试登录,但得到相同的结果。

我不知道这发生在这么的用户身上是怎么发生的。我错过了什么吗?

感谢帮助。

============== 添加更多信息。

我深入研究了这个问题,发现用户的会话不可解码。 session.get_decoded() for session in Session.objects.all()返回Session data corrupted错误。与登录失败有关吗?

标签: djangosessioncookiesdjango-rest-frameworksession-cookies

解决方案


推荐阅读