登录:绑定、服务器列表

This commit is contained in:
luying
2021-03-03 17:47:00 +08:00
parent c9dbb16adc
commit bbdc20240d
8 changed files with 227 additions and 48 deletions

View File

@@ -28,8 +28,8 @@ export default class AccountController extends Controller {
public async pwLogin() {
const { ctx } = this;
const { tel, deviceId, pw } = ctx.request.body;
ctx.body = await ctx.service.auth.pwLogin(tel, deviceId, pw);
const { tel, deviceId, password } = ctx.request.body;
ctx.body = await ctx.service.auth.pwLogin(tel, deviceId, password);
}
public async checkRole() {
@@ -43,4 +43,16 @@ export default class AccountController extends Controller {
const { serverId, roleName } = ctx.request.body;
ctx.body = await ctx.service.auth.createRole(serverId, roleName);
}
public async bind() {
const { ctx } = this;
const { tel, code, password } = ctx.request.body;
ctx.body = await ctx.service.auth.bind(tel, code, password);
}
public async authentication() {
const { ctx } = this;
const { name, idNum } = ctx.request.body;
ctx.body = await ctx.service.auth.authentication(name, idNum);
}
}

View File

@@ -1,39 +1,83 @@
import { STATUS } from '@consts';
import { GameModel } from '@db/Game';
import { Controller } from 'egg';
import { RoleModel } from '@db/Role';
export default class GameController extends Controller {
public async getServerList() {
const { ctx } = this;
let serverList: Array<any> = [];
let { serverType, auth } = ctx;
if (auth === 1) {
serverList = await GameModel.getAllServerList();
} else if (!auth) {
serverList = await GameModel.getServerListByType(serverType);
}
if (serverList && serverList.length > 0) {
ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { serverList });
} else {
ctx.body = ctx.service.utils.resResult(STATUS.SERVER_NOT_FOUND);
}
}
public async newServer() {
const { ctx } = this;
const { serverId, serverType, name, host, port, status } = ctx.request.body;
const serverList = await GameModel.getAllServerList();
for (let { id, host: preHost, port: prePort } of serverList) {
if (preHost === host && prePort === port && id === serverId) {
ctx.body = ctx.service.utils.resResult(STATUS.SERVER_EXISTS);
return;
}
public async getServerList() {
const { ctx } = this;
let { serverType, auth, uid } = ctx;
let serverList = [];
let loginServerList = [];
let allServers = await GameModel.getServerList();
let roles = await RoleModel.findAllByUid(uid);
console.log(roles.length)
for(let server of allServers) {
if(auth === 1 || (!auth && server.serverType == serverType)) {
serverList.push(server);
let role = roles.find(role => role.serverId == server.id);
if(!!role) {
let roleInfo = {
roleId: role.roleId,
roleName: role.roleName,
headHid: role.headHid,
sHid: role.sHid,
lv: role.lv
};
loginServerList.push({...server, ...roleInfo});
}
}
}
if (serverList && serverList.length > 0) {
ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { serverList, loginServerList });
} else {
ctx.body = ctx.service.utils.resResult(STATUS.SERVER_NOT_FOUND);
}
return
}
const gameInfo = await GameModel.newServer(serverId, serverType, name, host, port, status);
if (gameInfo) {
ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { gameInfo });
} else {
ctx.body = ctx.service.utils.resResult(STATUS.NEW_SERVER_ERR);
public async newServer() {
const { ctx } = this;
const { serverId, serverType, name, host, port, status } = ctx.request.body;
const serverList = await GameModel.getAllServerList();
for (let { id, host: preHost, port: prePort } of serverList) {
if (preHost === host && prePort === port && id === serverId) {
ctx.body = ctx.service.utils.resResult(STATUS.SERVER_EXISTS);
return;
}
}
const gameInfo = await GameModel.newServer(serverId, serverType, name, host, port, status);
if (gameInfo) {
ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { gameInfo });
} else {
ctx.body = ctx.service.utils.resResult(STATUS.NEW_SERVER_ERR);
}
return
}
}
public async getnotice() {
const { ctx } = this;
let { serverType } = ctx;
console.log(serverType);
let notice = [{
id: 1,
title: '粮草先行',
tag: 1,
type: 1,
content: '欢迎来到三国志赵云传',
startTime: 1584921600,
endTime: 1585353600
}]
ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { notice });
return
}
}

View File

@@ -12,5 +12,7 @@ export default (app: Application) => {
router.post('/user/pwlogin', controller.account.pwLogin);
router.post('/user/checkrole', tokenParser, controller.account.checkRole);
router.post('/user/createrole', tokenParser, controller.account.createRole);
router.post('/user/bind', tokenParser, controller.account.bind);
router.post('/user/authentication', tokenParser, controller.account.authentication);
router.post('/game/getserverlist', tokenParser, controller.game.getServerList);
};

View File

@@ -28,6 +28,7 @@ export default class Auth extends Service {
const ctx = this.ctx;
let user = await UserModel.findUserByToken(token);
let loginType = 1;
if (!user) {
if(isGuest) {
@@ -35,8 +36,13 @@ export default class Auth extends Service {
const token = ctx.service.utils.generateStr(256);
user = await UserModel.createUser(isGuest, tel, token, platform, pkgName, serverType, deviceId);
let param = this.getReturnParam(user);
// TODO 判断同一设备号15天内是否重复使用游客模式
if(param.isGuest && param.guestTime > 60*60*1000) {
loginType = 2;
}
return this.ctx.service.utils.resResult(STATUS.SUCCESS, {
canLogin: true,
loginType,
...param
});
} else {
@@ -49,8 +55,13 @@ export default class Auth extends Service {
const token = ctx.service.utils.generateStr(256);
user = await UserModel.updateToken(user.tel, token, deviceId);
let param = this.getReturnParam(user);
if(param.isGuest && param.guestTime > 60*60*1000) {
loginType = 2;
}
return this.ctx.service.utils.resResult(STATUS.SUCCESS, {
canLogin: true,
loginType,
...param
});
}
@@ -135,7 +146,11 @@ export default class Auth extends Service {
const smsResult = await this.sendSmsCodeByGuodu(tel, code);
console.log(smsResult);
await smsModel.updateByTel(tel, code, false, new Date(), sms?.hasSendToday() ? sms.countToday + 1 : 1);
return this.ctx.service.utils.resResult(STATUS.SUCCESS);
let user = await UserModel.findUserByTel(tel);
return this.ctx.service.utils.resResult(STATUS.SUCCESS, {
hasAccount: !!user
});
}
/**
@@ -189,6 +204,7 @@ export default class Auth extends Service {
public async setPassword(password: string) {
const { ctx } = this;
const { uid } = ctx;
if(!password) return ctx.service.utils.resResult(STATUS.PASSWORD_ILLEGEL);
let user = await UserModel.setPass(uid, password);
if (user) {
@@ -290,4 +306,66 @@ export default class Auth extends Service {
}
return ctx.service.utils.resResult(STATUS.ROLE_NOT_FOUND);
}
/**
* 绑定账号
* @param password 密码
*/
public async bind(tel: string, code: string, password: string) {
const ctx = this.ctx;
// 参数检查
const telVerify = this.checkTelNo(tel);
if (telVerify.status !== 0) {
return telVerify;
}
if (!isString(code) || code.length !== 6 || !password) {
return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
}
// 手机验证码核验
const smsValid: boolean = await smsModel.validateSms(tel, code);
if (!smsValid) {
const sms = await smsModel.findByTel(tel);
if (sms && sms.isFixed) { // 固定手机号登录
if (sms.code !== code) {
return ctx.service.utils.resResult(STATUS.SMS_INVALID);
}
} else {
return ctx.service.utils.resResult(STATUS.SMS_INVALID);
}
}
let telUser = await UserModel.findUserByTel(tel);
if(telUser && telUser.uid != ctx.uid) {
return ctx.service.utils.resResult(STATUS.TEL_HAS_USED);
}
let user = await UserModel.bindTel(ctx.uid, tel, password);
if(!user) return ctx.service.utils.resResult(STATUS.ACCOUNT_NOT_GUEST);
let param = this.getReturnParam(user);
return ctx.service.utils.resResult(STATUS.SUCCESS, param);
}
/**
* 实名认证
* @param password 密码
*/
public async authentication(name: string, idNum: string) {
const ctx = this.ctx;
// TODO 接SDK
console.log(name, idNum);
let birthday = this.getBirthdayByIdCard(idNum);
let user = await UserModel.authentication(ctx.uid, birthday, '');
let param = this.getReturnParam(user);
return ctx.service.utils.resResult(STATUS.SUCCESS, param);
}
private getBirthdayByIdCard(idNum: string) {
let year = idNum.slice(6,10);
let month = idNum.slice(10,12);
let date = idNum.slice(12,14);
return `${year}-${month}-${date}`;
}
}