平台默认的一个用户可以在多个地方登陆多次,并且提供了“在线用户”功能可以查看在线用户
如果要控制一个用户只运行登录一次,可以在登录前获取到输入的用户名与“在线用户”中的数据做对比
本例是判断如果已登录了可以注销之前的用户再登录,或者切换其他的用户登录
/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); } };
评一波