gpt4 book ai didi

asp.net - jquery $.get 身份验证已过期 : gets the login screen in popup

转载 作者:行者123 更新时间:2023-12-01 06:25:38 39 4
gpt4 key购买 nike

问题是,如果身份验证 cookie 已过期,并且用户单击应使用 $.get 打开弹出窗口的链接,则我会在弹出窗口中看到登录屏幕(另一个主页中的相同母版页)母版页)而不是将整个页面重定向到登录屏幕

有人知道如何解决这个问题吗?

最佳答案

当您在登录 session 过期后发出请求时,ASP.NET 将自动执行 302 重定向到您的登录操作,而不是返回 401“未经授权”。浏览器将悄悄地遵循重定向(即使在 AJAX 请求期间)并发出第二个请求以关闭登录页面。据我所知,无法在 Javascript 中检测或阻止此重定向,并且在不重新实现整个 FormsAuthenticationModule 的情况下无法阻止服务器端重定向。

但是,jQuery 会插入 HTTP header

X-Requested-With=XmlHttpRequest

进行 Ajax 调用时。 ASP.NET MVC 中的 Request.IsAjaxRequest() 方法可用于检测此 header 是否存在。

我们在网站上所做的事情被放置


if (Request.IsAjaxRequest()) {
返回新的 HttpUnauthorizedResult();
}

进入我们的/auth/login 操作,以便在 AJAX 调用期间调用/auth/login 时返回 401 错误而不是登录页面 HTML。然后我们检测 Javascript 中的 401 并手动重定向到登录页面。

不幸的是,Firefox(从 3.5 开始)和 Opera(从 ~9.something 开始)不会在重定向后的第二个请求中维护 X-Requested-With header ,因此当这些浏览器在这种情况下 IsAjaxRequest() 返回 false正在被使用。这对我们来说不是一个大问题,但需要记住。

关于asp.net - jquery $.get 身份验证已过期 : gets the login screen in popup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2070609/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com