Django 如何确定我的用户是否已通过身份验证?

时间:2021-04-09 10:15:52

标签: python django

我正在构建一个在后端使用 Django 进行身份验证的 SPA,我正在使用会话身份验证。

为了检查用户是否通过身份验证,SPA 向 Django 发送一个标准请求到一个端点,该请求将简单地返回 request.user.is_authenticated。这是有效的,因为 sessionid cookie 总是从客户端发送到 Django 应用程序。

在 SPA 应用程序的另一部分,由于某种原因,cookie 没有随请求一起发送,因此即使用户登录,Django 也始终返回 False。我找到的解决方案是发送 sessionid POST 请求正文中的 cookie,但这仍将返回 False

由于这也不起作用,我有这个想法:如果 sessionid cookie 不在 cookie 中,但在请求正文中,则从视图中手动设置 cookie:

def checkAuth(request):
    if request.method == 'POST':
        session_cookies = json.loads(request.body.decode('utf-8'))
        request.COOKIES['sessionid'] = session_cookies['sessionid']
        request.COOKIES['csrftoken'] = session_cookies['csrftoken']
        print(request.COOKIES)

    response = {'state': str(request.user.is_authenticated), 'username': str(request.user)}
    return JsonResponse(response, safe=False)

在这里我看到在视图中设置的 cookie:

{'sessionid': 'somecookie', 'csrftoken': 'sometoken'}

但是 request.user.is_authenticated 仍然返回 False。这是为什么?有什么办法可以解决这个问题吗?

0 个答案:

没有答案
相关问题