javascript弹出窗口阻止程序和ajax回调 - C#MVC应用程序

时间:2013-11-10 18:03:56

标签: c# javascript jquery ajax

安全网站中有2个要求,其中表单正在发布到网址:

  1. 如果身份验证票仍然有效,则表单将发布到 new 窗口,否则相同的窗口会将用户重定向到登录页面。
  2. 将表单发布到新窗口调用弹出窗口阻止程序。
  3. 我已经写了一个ajax动作,以获得关于auth是否仍然有效的正确答案。 但是我无法让重定向代码超出脚本执行上下文,从而避免弹出窗口阻止程序。请帮忙!

    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>
    

2 个答案:

答案 0 :(得分:0)

我不相信你可以做任何事情来调整弹出块以避免它。如果js可以做到这一点,它几乎完全会破坏拦截器的目的。此外,您应该考虑在js中进行重定向的安全性,因为代码在用户空间中。用户可以从浏览器中取消重定向。

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

 RedirectToAction() 

答案 1 :(得分:0)

在阅读了几篇jQuery帖子甚至signalR之后,this codeproject.com article对我的案例最有帮助。似乎有一种更简单的方法来处理这个问题。开发人员在给定时间不知道身份验证是否有效,但在过期后明确知道。这些知识可以在JavaScript中进行硬编码,并且警报可以预先发送给用户(setTimeout),而不是等待他们点击,然后试图弄明白。这种方法不会让我打扰弹出窗口阻止程序。