Files
wsmud/world/extends/login.js
2026-05-26 16:41:20 +08:00

102 lines
3.2 KiB
JavaScript

const USERLOGIN = WORLD.USERLOGIN;
USERLOGIN.check_user = function (loginuser, id) {
return true;
}
USERLOGIN.check_session = function (user, str) {
if (user.userid) {
return this.login_error(user, '参数错误');
}
str = str.split(" ");
if (str.length < 2) {
return this.login_error(user, '参数错误');
}
var cookieUser = this.encryptUser(str[0], str[1]);
if (!cookieUser || cookieUser.id === 0) {
return this.login_error(user, "登录参数错误,请使用账号密码<CMD onclick=\\'HideAndShow(\"#login_panel\")\\'>重新登录</CMD>");
}
user.user_level = cookieUser.level ?? 0;
user.wait_input = null;
user.userid = cookieUser.id;
user.password = cookieUser.pwd;
user.loginTime = cookieUser.loginTime;
user.ip_address = user.socket.remoteAddress;
if (cookieUser.id !== WORLD.admin_user) {
if (WORLD.CONNECT_COUNT > WORLD.max_connect_count) {
return this.login_error(user, '服务器人数过多,请稍后再试。');
}
if (str.length === 2 && WORLD.USERS.length > WORLD.max_user_count) {
return this.login_error(user, '服务器人数过多,请稍后再试。');
}
if (!WORLD.before_login(user)) {
return this.login_error(user, '服务器正在关闭或开启,请稍后再试。');
}
}
if (str.length === 4) {
if (parseInt(str[3]) !== WORLD.SERVERID)
return this.login_error(user, '参数错误。');
var data = WORLD.can_cross(str[2]);
if (!data) {
return this.login_error(user, '不允许登录');
}
WORLD.on_user_cross_login(user, data);
return;
} else {
user.serverid = WORLD.SERVERID;
}
if (str[2]) {
return this.wait_login(user, 'login ' + str[2]);
}
this.load_roles(user);
user.wait_input = this.wait_login;
}
USERLOGIN.wait_login = function (user, str) {
if (!str) return;
var i = str.indexOf(' ');
var cmd = str, pars = "";
if (i > 0) {
cmd = str.substr(0, i);
pars = str.substr(i + 1);
}
const command = WORLD.COMMANDS[cmd];
if (command && command.allow_login) {
return WORLD.COMMANDS[cmd].enter(user, pars);
}
}
USERLOGIN.load_roles = async function (user) {
try {
let roles = await WORLD.DB.getRoles(user.userid, user.serverid);
if (!roles || !roles.length) {
user.send("{type:'roles',roles:[]}");
} else {
var str = ["{type:'roles',roles:["];
for (var i = 0; i < roles.length; i++) {
str.push("{name:'");
str.push(roles[i].name);
str.push("',title:'");
str.push(roles[i].title);
str.push("',id:'");
str.push(roles[i].id);
str.push("'}");
if (i !== roles.length - 1) str.push(",");
}
str.push("]}");
user.send(str.join(""));
}
} catch (error) {
console.error(user.userid, '角色读取 ', error);
WORLD.log(null, "登陆失败:" + user.userid, error.message);
return USERLOGIN.login_error(user, '数据读取失败');
}
}