平台默认的一个用户可以在多个地方登陆多次,并且提供了“在线用户”功能可以查看在线用户
如果要控制一个用户只运行登录一次,可以在登录前获取到输入的用户名与“在线用户”中的数据做对比
本例是判断如果已登录了可以注销之前的用户再登录,或者切换其他的用户登录
/UI2/portal/base/login/login.js的Model.prototype.login = function() {方法修改如下:
Model.prototype.login = function() {
var remember = this.comp('remember'), name = this.comp('name'), password = this.comp('password'), autoLogin = this.comp('autoLogin');
var urlParams = {};
urlParams.username = name.val() || $("[xid=name]").val();// 为了支持360急速浏览器,
// 自动设置参数的情况
if (!urlParams.username)
throw justep.Error.create("请输入登录用户名!");
urlParams.password = password.val() || $("[xid=password]").val();// 同上
if (urlParams.password !== this.store("password")) {// 说明非是明文
urlParams.password = md5.hex_md5_salt(urlParams.password);
}
urlParams.loginDate = justep.Date.toString(new Date(), 'yyyy-MM-dd');
var ctx = this.getContext();
var lang = ctx.getLanguage();
if (lang)
urlParams[LangParamName] = lang;
var client = (this.comp("client") && $.isFunction(this.comp("client").val) && this.comp("client").val()) || ctx.getRequestParameter('client') || this.params.client;
if (client)
urlParams.client = client;
var options = {
dataType : "json",
url : require.toUrl("$UI/system/service/common/queryOnlineUsers.j")
};
var resultOnline = biz.Request.sendHttpRequest(options);// 调用在线用户的请求返回在线用户列表
if (biz.Request.isSuccess(resultOnline) && resultOnline.responseJSON.flag) {
var data = biz.Request.getData(resultOnline);
var rows = data.rows;
for (var i = 0; i < data.rows.length; i++) {
if (name.value == rows[i].name.value) {// 判断当前输入的name是否在在线用户列表中
var bsessionid = rows[i].sessionid.value// 从在线用户列表获取已登录的bsessionid
var r = confirm("该用户已登录请确认是否退出登录重新登录,若取消请换其他用户登录");
if (r == true) {
// 注销已登录的bsessiondid
var url = require.toUrl("$UI/portal/base/logout/logout.j?bsessionid=" + bsessionid);
$.ajax({
type : "POST",
processData : false,
url : url,
cache : false,
async : false
});
} else {
return;
}
}
}
}
var result = this.doLogin(urlParams);
if (result.flag === true) {
var auto = autoLogin.val();
if (remember.val()) {
this.store('rememberme', "remember");
this.store('username', urlParams.username);
this.store('password', urlParams.password);
this.store('autoLogin', auto);
}
// 对话框返回数据
this.comp("receiver").windowEnsure(result.data);
return false;
} else {
throw justep.Error.create(result.message);
}
};
评一波