【发布时间】: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