我们的一个 XPages 应用程序的登录模块有一点问题。
我们使用来自http://www.qtzar.com/dslh-7qpr7x/的 XPages 登录模块作为基础。登录模块在所有浏览器中都可以正常工作,甚至是移动设备(版本略有不同),但它在 Chrome 中不起作用。在 Chrome 中,我看到登录成功的图标,但重新加载后,什么都没有发生,我没有登录。
我们已经测试了很多变体,目前我们已经将 AJAX 方法 vom Dojo 切换到 JQuery,但这也没有改变任何东西。
这是当前的源代码:
<xc:bcc_basic_user
loaded="${javascript: getUserRoles.indexOf('Admin')==-1}"
rendered="#{javascript:isLoggedIn;}" />
<xc:bcc_basic_admin
loaded="${javascript: getUserRoles.indexOf('Admin')!=-1}"
rendered="#{javascript:isLoggedIn;}" />
<!--
The following methods for user log in are taken from or based on
http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=XPages%20Sliding%20Login%20Custom%20Control#
and underly the Apache License For more information on how this works
see: http://www.qtzar.com/blog/dslh-7qps3g/
-->
<xp:scriptBlock id="loginScript" type="text/javascript">
<xp:this.value>
<![CDATA[
function doLogin() {
var username = dojo.byId("#{id:cc_login_panel_login_username}").value;
var password = dojo.byId("#{id:cc_login_panel_login_password}").value;
if (username!=null && username.length>0 && password!=null && password.length>0) {
dojo.style("#{id:cc_login_panel_login_failed}","display","none");
dojo.style("#{id:cc_login_panel_login_notauth}","display","none");
dojo.style("#{id:cc_login_panel_login_wait}","display","block");
var postData = {
"username" : username,
"password" : password,
"RedirectTo": "#{javascript:BCCJSFUtils.getDatabasePath(false)}/img/waiting.gif"
};
$.ajax({
url: '#{javascript:session.getServerName()}/names.nsf?Login',
data: postData,
type: 'POST',
async: false,
cache: false,
success: function (data) {
alert("onComplete");
if(String(data).substring(0,3).toUpperCase() == "GIF") {
dojo.style("#{id:cc_login_panel_login_wait}","display","none");
dojo.style("#{id:cc_login_panel_login_success}","display","block");
var url = window.location.href;
if (url.indexOf(".xsp")==-1) {
if (url.substring(url.length-1,url.length)!='/') {
url += '/';
}
url += "#{javascript:getLandingPage}";
}
if (url.indexOf('?')!=-1) {
url += "&doRefresh=true";
} else {
url += "?doRefresh=true";
}
window.location.href = url;
return false;
} else {
if (dojo.cookie('DomAuthSessId') != null || dojo.cookie('LtpaToken') != null) {
dojo.style("#{id:cc_login_panel_login_wait}","display","none");
dojo.style("#{id:cc_login_panel_login_notauth}","display","block");
dojo.cookie('DomAuthSessId', null, { path: '/', domain: 'bcc.biz' });
dojo.cookie('LtpaToken', null, { path: '/', domain: 'bcc.biz' });
} else {
dojo.style("#{id:cc_login_panel_login_wait}","display","none");
dojo.style("#{id:cc_login_panel_login_failed}","display","block");
}
}
},
error: function (error) {
alert("onError");
console.error ('Error: ', error);
//IE Has An Issue with returning binary data in AJAX so just reload the page.
console.error ('Possibly Running IE - Reloading Page Anyway');
var url = window.location.href;
if (url.indexOf(".xsp")==-1) {
if (url.substring(url.length-1,url.length)!='/') {
url += '/';
}
url += "#{javascript:getLandingPage}";
}
if (url.indexOf('?')!=-1) {
url += "&doRefresh=true";
} else {
url += "?doRefresh=true";
}
window.location.href = url;
return false;
}
});
}
}]]>
</xp:this.value>
</xp:scriptBlock>
<xp:div styleClass="btn-group pull-right" rendered="${javascript:!isLoggedIn}">
<xp:panel id="cc_login_panel_login_content">
<xp:inputText id="cc_login_panel_login_username"
styleClass="span2">
<xp:eventHandler event="onkeypress" submit="false">
<xp:this.script><![CDATA[
if (thisEvent.keyCode!=13) {
return false;
} else {
doLogin();
}]]>
</xp:this.script>
</xp:eventHandler>
</xp:inputText>
<xp:inputText id="cc_login_panel_login_password"
styleClass="span2" password="true">
<xp:eventHandler event="onkeypress" submit="false">
<xp:this.script><![CDATA[
if (thisEvent.keyCode!=13) {
return false;
} else {
doLogin();
}]]>
</xp:this.script>
</xp:eventHandler>
</xp:inputText>
<xp:button value="${basicLang['LOGIN']}" id="cc_login_panel_login_button"
styleClass="btn pull-right" style="font-weight:bold;margin-left:4px;">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[doLogin();]]></xp:this.script>
</xp:eventHandler>
</xp:button>
</xp:panel>
<xp:panel id="cc_login_panel_login_wait" style="display:none;">
<ul class="login-info navbar-background" style="width:100%;">
<li>
<span>
<xp:image url="img/waiting.gif" id="image1" height="16"
width="16" />
</span>
</li>
<li>
<xp:text value="${basicLang['CHECKING_CREDENTIALS']}" id="label2"
styleClass="text-info" style="padding: 0px 5px; font-weight: bold;" tagName="div" />
<br />
<xp:text value="${basicLang['PLEASE_WAIT']}" id="label1" style="padding: 0px 5px;"
tagName="div" />
</li>
</ul>
</xp:panel>
<xp:panel id="cc_login_panel_login_success" style="display:none;">
<ul class="login-info navbar-background" style="width:100%;">
<li>
<span>
<i class="icon-ok" />
</span>
</li>
<li>
<xp:text value="${basicLang['LOGIN_SUCCESSFUL']}" id="label4"
styleClass="text-success" style="padding: 0px 5px; font-weight: bold;" tagName="div" />
</li>
</ul>
</xp:panel>
<xp:panel id="cc_login_panel_login_failed" style="display:none;">
<ul class="login-info navbar-background" style="width:100%;">
<li>
<span>
<i class="icon-remove" />
</span>
</li>
<li>
<xp:text value="${basicLang['LOGIN_FAILED']}" id="label3"
styleClass="text-warning" style="padding: 0px 5px; font-weight: bold;" tagName="div" />
</li>
</ul>
</xp:panel>
<xp:panel id="cc_login_panel_login_notauth" style="display:none;">
<ul class="login-info navbar-background" style="width:100%;">
<li>
<span>
<i class="icon-ban-circle" />
</span>
</li>
<li>
<xp:text value="${basicLang['NOT_AUTHORIZED']}" id="label6"
styleClass="text-warning" style="padding: 0px 5px; font-weight: bold;" tagName="div" />
</li>
</ul>
</xp:panel>
</xp:div>
我们已经在另一台服务器上测试了代码,有趣的是,在这台服务器上它甚至可以在 Chrome 中运行......我们已经寻找了服务器之间的差异。我们看到在第一台服务器上(它不起作用)将“登录时强制 SSL”设置为 true,但是当我们将其设置为 false 时它并没有改变任何东西。另一个区别是第一个服务器是 Domino 9 服务器,而它工作的服务器是 8.5.2 服务器。
你知道那里会出什么问题吗?我现在正试图让它工作两天,但我想不出可能是什么原因导致这个问题。正如我所说,在所有浏览器中它都可以正常工作,除了 Chrome。但它适用于 Chrome 中的另一台服务器。
如果您需要更多信息,我会发布它们。
提前致谢。