在 Django 2.2 上设置一个带有 samesite none 的 cookie

时间:2021-03-23 03:32:10

标签: python django cookies samesite

我正在尝试为版本 2.2.x 上的 Django 项目设置一个特定的 cookie,使其具有 samesite='None'。我继续收到以下错误。

raise ValueError('samesite must be "lax" or "strict".')

我可以看到来自venv/lib/python3.9/site-packages/django/http/response.py

if samesite:
  if samesite.lower() not in ('lax', 'strict'):
    raise ValueError('samesite must be "lax" or "strict".')
  self.cookies[key]['samesite'] = samesite

我尝试过以下操作:

  1. 在设置中进行全局设置,例如 CSRF_COOKIE_SAMESITE = 'None'SESSION_COOKIE_SAMESITE = 'None'
  2. 通过 set_cookie(name, value=value, secure=True, samesite='None') 在需要它的 cookie 上设置它

这两种方法都行不通。我还尝试安装包 django-cookies-samesite 并添加它的中间件,但它似乎没有什么区别。

# example
MIDDLEWARE = (
    "django_cookies_samesite.middleware.CookiesSameSite",
    # other middleware
)

当我将值设置为 None 而不是 'None' 时,不会添加任何值,我相信 Chrome 在没有值时会回退到 lax

我也试过在 Django set_cookie 之外设置一个 cookie,但没有任何运气:

# this fails with AttributeError: 'JsonResponse' object has no attribute 'COOKIES'
response["Set-Cookie"] = f"{name}={value}; Secure={False}; SameSite='None'; Path=/"
# this adds the cookie however doesn't parse it correctly so it fails
response.cookies[name] = f"{name}={value}; Secure={False}; SameSite='None'; Path=/"

# eg
Set-Cookie: my_name="my_value Secure=False\073 SameSite='None'\073 Path=/"
# where the other cookies look like
Set-Cookie: my_name=my_value; expires=Wed, 28 Apr 2021 02:51:02 GMT; Max-Age=2592000; Path=/

有没有办法解决这个问题?我可以看到较新版本的 Django 支持这一点,但我想看看是否有办法解决我们当前版本的 Django (2.2)。

0 个答案:

没有答案