【发布时间】:2020-01-08 09:05:55
【问题描述】:
我刚刚在http://192.168.0.6:19006 运行了一个Expo-web 开发服务器,出现了很多问题。
当我没有安装 django-cors-headers 时,只加载了主页,其他任何请求都失败了。我很快意识到我必须安装 django-cors-headers。所以我做了。但是后来我的网络应用程序无法保持登录状态。登录过程本身在服务器端是成功的。客户端收到一条消息,告知登录成功。但是当它转换到下一页时,它会自动退回到主页(正如我设置的那样),因为应用程序无法保持登录状态。我假设 cookie 凭据有问题。但我设置的凭据设置如下:
CORS_ORIGIN_WHITELIST = [
'http://192.168.0.6:19006',
]
CORS_ALLOW_CREDENTIALS = True
SESSION_COOKIE_SAMESITE = None
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
]
INSTALLED_APPS = [
...
'corsheaders',
]
另一个问题是静态文件不提供 CORS 允许的标头。即使我使用 django-cors-headers 并允许所有设置,静态文件也无法加载并显示错误消息:
Access to XMLHttpRequest at 'http://192.168.0.6:8000/static/app%20Terms%20of%20Service.json' from origin 'http://192.168.0.6:19006' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
为什么CORS_ALLOW_CREDENTIALS = True 不起作用?还是我缺少什么?
【问题讨论】:
-
在您的设置中将
CORS_ORIGIN_ALLOW_ALL设置为 True 是否有效? -
@JulienKieffer 不,我已经尝试过那个,不幸的是它对我不起作用。我猜问题出在客户端,而不是 Django-cors-headers,因为我使用的是 Apollo websocket。
-
我可以看到标头设置为 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: 192.168.0.6:19006 和 Set-Cookie:... 所以登录成功并且 cookie寄了,送了。但它不适用于 Apollo websocket。
标签: django cors expo django-cors-headers react-native-web