0

在将表单发布到 url 的安全网站中有 2 个要求:

  1. 如果身份验证票仍然有效,表单将发布到新窗口,否则同一窗口会将用户重定向到登录页面。
  2. 将表单发布到新窗口不会调用弹出窗口阻止程序。

我已经写了一个 ajax 动作来获得关于 auth 是否仍然有效的正确答案。但我无法让重定向代码出现在脚本执行上下文之外,从而避免 popup blocker。请帮忙!

JavaScript:

    $('#someSystem').click(function () {
        //deferred promise?
        auth().done(function (result) {
            //need to move below code outside this callback without side effects
            if (result == 'true') {
                var form = $('#ssoForm');
                form.submit();
            }
            else {
                window.location.href = "/account/login";
            }
        });
        return false;
    });

    function auth() {
        return $.ajax({ url: '/account/isauthenticated', method: "POST" });
    }

已通过身份验证的用户的 HTML

<form action="/sso/somesystem" id="ssoForm" method="post" target="_blank">
    ...
    <div id="someSystem">Continue</div>
</form>
4

2 回答 2

0

在阅读了几篇 jQuery 帖子甚至 signalR 之后,这篇 codeproject.com 文章对我的案例最有帮助。似乎有一种更简单的方法来处理这个问题。开发人员不知道认证在给定时间是否有效,但肯定知道它会在多长时间后过期。这些知识可以硬编码在 JavaScript 中,并且可以先发制人地向用户发送警报 ( setTimeout),而不是等待他们点击然后尝试找出答案。这种方法不会让我打扰弹出窗口阻止程序。

于 2013-11-11T17:20:42.037 回答
0

我不相信除了调整弹出框来避免它之外,您将无法做任何事情。如果 js 可以做到这一点,它几乎会完全破坏阻止程序的目的。您还应该考虑在 js 中进行重定向的安全性,因为代码位于用户空间中。用户可以从他们的浏览器取消重定向。

相反,为什么不在服务器上进行检查并使用

 RedirectToAction() 
于 2013-11-10T18:17:14.510 回答