django-graphql-jwt JWT_COOKIE_SAMESITE 不工作

django-graphql-jwt JWT_COOKIE_SAMESITE not working

我正在使用 Django GraphQL JWT Library and Django GraphQL Auth

我一直收到这个错误 google chrome error

在 http://localhost:3000/ 和 https://localhost:3000/ 上使用此反应代码(针对相关性进行了修剪)

    const [login] = useMutation(LOGIN_MUTATION, {
        variables: {
            email: email,
            password: password
        },
        onCompleted: ({ tokenAuth }) => {
            if (tokenAuth.success) {
                setToken(tokenAuth.token);
            }
        }
    });

现在,当我 运行 来自 graphiql 页面的这个突变起作用时,我最终得到了一个 JWT cookie,但不在反应站点上

mutation {
  tokenAuth(
    email:"********"
    password:"*********"
  ){
    token
    refreshToken
    success
    errors
  }
}

这行不通

GRAPHQL_JWT = {
    "JWT_COOKIE_SAMESITE": 'None',
    "JWT_ALLOW_ARGUMENT": True
}

添加这些无效

    "CSRF_COOKIE_SECURE": True,
    "SESSION_COOKIE_SECURE": True,
    "CSRF_COOKIE_SAMESITE": 'None',
    "SESSION_COOKIE_SAMESITE": 'None',
    "JWT_VERIFY_EXPIRATION": True,

将这些添加到 django 设置也没有用

SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SAMESITE = 'None'

CSRF_COOKIE_SECURE = True
CSRF_COOKIE_SAMESITE = 'None'

我已经在这个问题上坚持了大约 3 天了,我已经准备好跳入河中去建造桌子了。请帮忙。

在版本 v0.3.2 上为 django-graphql-jwt 添加了对 JWT_COOKIE_SAMESITE 设置的支持。您可以在此处查看发布 releases。而当前的 django-graphql-auth 包依赖于 django-graphql-jwt v0.3.0。更新您的要求将解决此问题。

所以问题是你正在使用 "JWT_COOKIE_SAMESITE": 'None' 只有当 "JWT_COOKIE_SECURE": True

和 JWT_COOKIE_SECURE 表示 cookie 将仅通过 HTTPS 连接发送,这不适用于 HTTP 连接。

考虑到您有 HTTP 并且后端使用与前端相同的域,那么您需要添加的只是 "JWT_COOKIE_SAMESITE": 'Lax' "JWT_COOKIE_SECURE": False

cookie 默认为 “SameSite=Lax”,这意味着仅当浏览器 URL 中的域与 cookie 的域匹配时才会设置 cookie