我正在构建一个在后端使用 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
。这是为什么?有什么办法可以解决这个问题吗?