【问题标题】:The event addUserSignedOut is triggered automaticity only when i use IE11只有当我使用 IE11 时才会触发事件 addUserSignedOut
【发布时间】:2019-07-10 22:41:05
【问题描述】:

我将 oidc.js 版本:1.5.2 与 aspnet 网络表单一起使用,由于某种原因,当我导航到我的回调页面时,有人触发了我的 addUserSignedOut 事件。 这种奇怪的行为只发生在 IE11 中(在 chrome、edge、firefox 中可以正常工作)。

这是主页

        var baseUrl = top.location.protocol + '//' + top.location.host;

        var config = {
            authority: "http://...",
            client_id: 'xyz',
            redirect_uri: baseUrl + '/myFolder/callback.html?',
            post_logout_redirect_uri: baseUrl + '/myFolder/page.html?',
            revokeAccessTokenOnSignout: true,
            response_type: 'id_token token',
            scope: 'abc',
            prompt: 'true',
            loadUserInfo: true,
            automaticSilentRenew: true,
            accessTokenExpiringNotificationTime: 1800,
        };

       var mgr = new Oidc.UserManager(config);

        var isLoggedIn = function () {
            return new Promise(function (resolve) {
                mgr.getUser()
                    .then(function (token) {
                        console.log("getUser token=" + token);
                        resolve(token != null);
                    });
            });
        }

        var doLogin = function () {
            this.isLoggedIn().then(function (res) {
                if (!res)
                    mgr.signinRedirect();
            });
        };

        var doLogout = function () {
            mgr.signoutRedirect();
        };

        var registerEvents = function () {
            this.isLoggedIn().then(function (res) {

                if (res) {
                    mgr.events.addUserSignedOut(function () {

                        Auth.userManager.removeUser();

                        return Auth.userManager.signoutRedirect();
                    });
                }
            });
        };

        registerEvents();


    </script>

这是回调页面

<script>
    new Oidc.UserManager({ response_mode: "query" }).signinRedirectCallback().then(function (res) {
        if (res) {
            console.log("token = " + res.access_token);
            window.location.href = "page.html";
            }
        })
        .catch(function (e) {
            console.error(e);
        });
</script>

【问题讨论】:

  • 你能显示你的代码吗?没有它,我们只能猜测问题的原因。
  • 当然。我添加了代码(上)。
  • 首先你的代码有错误,看一下高亮,几乎所有都被标记为字符串,因为你没有在scope: 'sast_api openid中关闭一个,但这可能是错字,因为你在那里有API密钥。
  • 我看到的问题,不确定在不同的浏览器上会有什么不同。检查 res 是什么(在 isLoggedIn 承诺中)可能是 IE 和其他浏览器中的不同对象。添加console.log(res)console.dir(res)。并检查 IE 和现代浏览器。
  • 如果你的回调页面代码没有在加载页面上执行,你可以尝试将脚本添加到onload函数或document.addEventListener("DOMContentLoaded", function() { })内部

标签: javascript internet-explorer openid-connect


【解决方案1】:

可能问题与 IE 安全区域有关,您可以尝试进入 Internet 选项 > 安全并取消选中“Internet”区域的“启用保护模式”。

【讨论】:

  • 谢谢。你能解释一下为什么这个问题只发生在 aspnet web 表单中而不是例如水疗架构中吗?
  • 您知道如何在不更改 IE 安全区域的情况下解决这个问题吗?
猜你喜欢
  • 2013-07-28
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 2017-09-06
  • 2012-06-19
  • 2019-12-05
相关资源
最近更新 更多