从浏览器中删除应用程序 cookie 后调用时重定向失败说 cors 错误
redirection fails when called after deleting application cookies from the browser says cors error
在我的 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,并对中间件进行了更改。
I'm assuming here, you've moved on from your redirection issue and
you're debugging the cors error while accessing your API - in that
case, you'd probably want to update the question title.
对于未来的读者 - 在调试任何与 cors 相关的问题之前,请确保您的 settings.py
文件中的导入以正确的顺序配置。
CorsMiddleware
应该放在尽可能高的位置,尤其是在任何可以生成响应的中间件之前,例如 Django 的 CommonMiddleware
或 Whitenoise 的 WhiteNoiseMiddleware
。如果不是之前,它将无法将 CORS header 添加到这些响应中。 -
引用于pypi.org
开始调查
使用浏览器的开发人员工具,调查网络选项卡。
不太确定,如果您共享的错误文本来自终端、日志或网络选项卡。
Select 网络选项卡中的失败请求并检查请求的 Headers、预览和响应。
它应该可以帮助您了解实际请求了哪些 cors header 以及您是否在 CORS_ALLOW_HEADERS = [...]
下的 settings.py
中包含了相同的内容
重定向后遇到 CORS 策略块!
我只能理解您的重定向逻辑的一部分,但您似乎正在使用 IAM 进行某种 LDAP 身份验证或 OAuth。在任何情况下,您可能都想确保您在已连接系统允许且适当分配的 CORS 策略范围内工作。
祝一切顺利!
在我的 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,并对中间件进行了更改。
I'm assuming here, you've moved on from your redirection issue and you're debugging the cors error while accessing your API - in that case, you'd probably want to update the question title.
对于未来的读者 - 在调试任何与 cors 相关的问题之前,请确保您的 settings.py
文件中的导入以正确的顺序配置。
CorsMiddleware
应该放在尽可能高的位置,尤其是在任何可以生成响应的中间件之前,例如 Django 的 CommonMiddleware
或 Whitenoise 的 WhiteNoiseMiddleware
。如果不是之前,它将无法将 CORS header 添加到这些响应中。 -
引用于pypi.org
开始调查
使用浏览器的开发人员工具,调查网络选项卡。
不太确定,如果您共享的错误文本来自终端、日志或网络选项卡。
Select 网络选项卡中的失败请求并检查请求的 Headers、预览和响应。
它应该可以帮助您了解实际请求了哪些 cors header 以及您是否在 CORS_ALLOW_HEADERS = [...]
settings.py
中包含了相同的内容
重定向后遇到 CORS 策略块!
我只能理解您的重定向逻辑的一部分,但您似乎正在使用 IAM 进行某种 LDAP 身份验证或 OAuth。在任何情况下,您可能都想确保您在已连接系统允许且适当分配的 CORS 策略范围内工作。
祝一切顺利!