从浏览器中删除应用程序 cookie 后调用重定向失败,提示 cors 错误
Posted
技术标签:
【中文标题】从浏览器中删除应用程序 cookie 后调用重定向失败,提示 cors 错误【英文标题】:redirection fails when called after deleting application cookies from the browser says cors error 【发布时间】:2020-05-12 04:04:45 【问题描述】:在我的 django 应用程序中,HttpResponseRedirection 失败 当我第一次这样做时,它会通过并重定向。
if request.user.is_anonymous:
request.session.flush()
print(request.get_host())
sso_auth_url = 'https://' + request.get_host().split(',')[0] + reverse('dcmsisso:auth')
windows_auth_url = os.path.join(API_BASE_URL, 'api', API_VERSION, 'windows/auth')
redirect_url = windows_auth_url + '?redirecturl=' + sso_auth_url + '?next=' + next_url
return HttpResponseRedirect(redirect_url)
当我在某个页面并删除所有会话 cookie 时,尝试重新加载它进入此块的页面并且不调用下一个函数。 但是,如果我左键单击失败的 url 并在新页面中打开它,那么它会重定向到主页。 从 3 天开始,我一直在尝试解决此错误。任何人都可以建议。 我可以提供更多信息,我不知道缺少什么。
编辑:我收到以下错误:
Access to XMLHttpRequest at 'https://iamws-xxx.com/api/v1/windows/auth?redirecturl=https://dcms.yyy.com/dcmsisso/auth?next=/home' (redirected from 'https://dcms.yyy.com/getUser') from origin 'https://dcms.yyy.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
在我的 settings.py 中:
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
CORS_ORIGIN_WHITELIST = [
"https://iamws.xxx.com",
"https://dcms.yyy.com"
]
CSRF_TRUSTED_ORIGINS = [
'iamws-xxx.com',
]
CORS_ORIGIN_ALLOW_ALL=True
CORS_ALLOW_CREDENTIALS=True
CORS_ALLOW_HEADERS = [
'Access-Control-Allow-Origin',
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
'content-type',
'Pragma',
'Expires',
'Cache-Control',
]
我还在已安装的应用程序中添加了 cors-headers 并在中间件中进行了更改。
【问题讨论】:
【参考方案1】:我在这里假设您已经摆脱了重定向问题并且 您在访问 API 时正在调试 cors 错误 - 在那 在这种情况下,您可能需要更新问题标题。
对于未来的读者 - 在调试任何与 cors 相关的问题之前,请确保您在 settings.py
文件中以正确的顺序配置了导入。
CorsMiddleware
应该放在尽可能高的位置,尤其是在任何可以生成响应的中间件之前,例如 Django 的 CommonMiddleware
或 Whitenoise 的 WhiteNoiseMiddleware
。如果不是之前,它将无法将 CORS 标头添加到这些响应中。 -
引用于pypi.org
开始调查
使用浏览器的开发者工具,调查网络标签。
不太确定,如果您分享的错误文本来自终端、日志或网络选项卡。
在您的网络选项卡中选择失败的请求,然后检查请求的标头、预览和响应。
它应该可以帮助您了解实际请求的是哪个 cors 标头,以及您是否在 settings.py
下的 CORS_ALLOW_HEADERS = [...]
下包含了相同的标头
重定向后遇到 CORS 策略阻塞!
我只能理解您的重定向逻辑的一部分,但您似乎正在使用 IAM 进行某种 LDAP 身份验证或 OAuth。在任何情况下,您都可能希望确保您在已连接系统的允许且适当分配的 CORS 策略范围内工作。
一切顺利!
【讨论】:
嗨,非常感谢您的回复。我做了你建议的改变。并编辑帖子。这是一种 LDAP 身份验证,当您第一次从特定 api 执行此操作时,我会通过,但从另一个 api 调用时会失败。 错误是从浏览器控制台复制的 如果其他应用程序不在生产中,那么您可以更新其settings.py
文件以允许CORS_ORIGIN_WHITELIST
中的所有域,或者简单地将CORS_ORIGIN_ALLOW_ALL
设置为True
。这将帮助您验证这是否确实是一个多源问题。如果您可以确定这一事实,那么您可以相应地为您的 cors 来源设置安全性。以上是关于从浏览器中删除应用程序 cookie 后调用重定向失败,提示 cors 错误的主要内容,如果未能解决你的问题,请参考以下文章
MVC 身份验证超时/会话 cookie 删除后的 Ajax 请求