URL 在 302 登录重定向后被 IE 删除的片段
URL fragment removed by IE after 302 login redirect
我们在应用程序中使用 SiteMinder 身份验证。
如果应用用户尝试通过直接 URL 或通过书签 URL 导航到我们应用中的特定页面 https://ourapp.com/myapp/#/pending/requests
,SiteMinder
将重定向到 login page
通过 302 重定向类似于 http://ourapp.com/login?redirect=https%3A%2F%2Fourapp.com%2Fmyapp%2F#/pending/requests
要求用户在 登录表单 中输入凭据。身份验证成功后,用户应被重定向到我们的应用程序并登陆请求的页面(/pending/requests
)。
它在 Chrome
和 Firefox
中运行得非常好。对于 IE,它会登陆 https://ourapp.com/myapp/#/home
(默认登陆页面)而不是 https://ourapp.com/myapp/#/pending/requests
.
我在我们的应用程序代码中尝试了 google search results
中提供的各种解决方案,例如,
- 正在删除
index.html
中的 <base>
标签
- 在页面顶部添加以下代码行
// setting location back
window.location = window.location;
// setting location hash back
window.location.hash = window.location.hash;
- 很少有其他解决方案与上述类似
尽管 this Q & A 完全有道理,
我还想preserve the URL hash fragment in IE even it's 3xx redirect
满足我的要求...!?
回答我自己的问题
我发现在成功验证后,SiteMinder
正在通过使用 登录表单隐藏变量 value
[=57= 对用户请求的应用程序页面执行 302 redirection
](它存储用户请求的 URL /myapp/
- without hash fragment
因为它不会被发送到服务器)名称类似于 redirect
。下面的示例表格
由于redirect
隐藏变量值仅包含/myapp/
而没有散列片段,并且它是一个302重定向,散列片段甚至在之前就被IE自动删除了来到我们的应用程序,我们在应用程序代码中尝试的任何解决方案都没有奏效。
IE 仅重定向至 /myapp/
,并登陆我们应用程序的默认主页 https://ourapp.com/myapp/#/home
。
浪费了将近一天的时间来弄清楚这种行为。
解决方法是:
已更改 登录表单 隐藏变量 (redirect
) value 以保存哈希片段
附加 window.location.hash
以及现有值。类似于下面的代码
$(function () {
var $redirect = $('input[name="redirect"]');
$redirect.val($redirect.val() + window.location.hash);
});
此更改后,redirect
隐藏变量将用户请求的 URL 值存储为 /myapp/#/pending/requests
,SiteMinder
将其重定向到 IE 中的 /myapp/#/pending/requests
.
以上解决方案在所有三种浏览器中都运行良好Chrome, Firefox and IE
。
感谢@AlexFord detailed explanation and providing solution 解决这个问题。
我们在应用程序中使用 SiteMinder 身份验证。
如果应用用户尝试通过直接 URL 或通过书签 URL 导航到我们应用中的特定页面 https://ourapp.com/myapp/#/pending/requests
,SiteMinder
将重定向到 login page
通过 302 重定向类似于 http://ourapp.com/login?redirect=https%3A%2F%2Fourapp.com%2Fmyapp%2F#/pending/requests
要求用户在 登录表单 中输入凭据。身份验证成功后,用户应被重定向到我们的应用程序并登陆请求的页面(/pending/requests
)。
它在 Chrome
和 Firefox
中运行得非常好。对于 IE,它会登陆 https://ourapp.com/myapp/#/home
(默认登陆页面)而不是 https://ourapp.com/myapp/#/pending/requests
.
我在我们的应用程序代码中尝试了 google search results
中提供的各种解决方案,例如,
- 正在删除
index.html
中的 - 在页面顶部添加以下代码行
<base>
标签
// setting location back
window.location = window.location;
// setting location hash back
window.location.hash = window.location.hash;
- 很少有其他解决方案与上述类似
尽管 this Q & A 完全有道理,
我还想preserve the URL hash fragment in IE even it's 3xx redirect
满足我的要求...!?
回答我自己的问题
我发现在成功验证后,SiteMinder
正在通过使用 登录表单隐藏变量 value
[=57= 对用户请求的应用程序页面执行 302 redirection
](它存储用户请求的 URL /myapp/
- without hash fragment
因为它不会被发送到服务器)名称类似于 redirect
。下面的示例表格
由于redirect
隐藏变量值仅包含/myapp/
而没有散列片段,并且它是一个302重定向,散列片段甚至在之前就被IE自动删除了来到我们的应用程序,我们在应用程序代码中尝试的任何解决方案都没有奏效。
IE 仅重定向至 /myapp/
,并登陆我们应用程序的默认主页 https://ourapp.com/myapp/#/home
。
浪费了将近一天的时间来弄清楚这种行为。
解决方法是:
已更改 登录表单 隐藏变量 (redirect
) value 以保存哈希片段
附加 window.location.hash
以及现有值。类似于下面的代码
$(function () {
var $redirect = $('input[name="redirect"]');
$redirect.val($redirect.val() + window.location.hash);
});
此更改后,redirect
隐藏变量将用户请求的 URL 值存储为 /myapp/#/pending/requests
,SiteMinder
将其重定向到 IE 中的 /myapp/#/pending/requests
.
以上解决方案在所有三种浏览器中都运行良好Chrome, Firefox and IE
。
感谢@AlexFord detailed explanation and providing solution 解决这个问题。