From ca686f84180e301353dbf0e7e761cbddabb99b9b Mon Sep 17 00:00:00 2001 From: luying Date: Mon, 24 Oct 2022 17:29:38 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(=E8=B4=A6=E5=8F=B7=E7=99=BB?= =?UTF-8?q?=E9=99=86):=20=E6=B7=BB=E5=8A=A0=E4=B8=8A=E6=AC=A1=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E7=9A=84=E8=AE=BE=E5=A4=87=E5=8F=B7=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shared/db/User.ts | 38 +++++++++++++++++++--------------- web-server/app/service/Auth.ts | 38 ++++++++++++++++++---------------- 2 files changed, 41 insertions(+), 35 deletions(-) diff --git a/shared/db/User.ts b/shared/db/User.ts index 75bf2b6c8..1cd5c6bb5 100644 --- a/shared/db/User.ts +++ b/shared/db/User.ts @@ -102,6 +102,9 @@ export default class User extends BaseModel { @prop({ required: true, type: String, default: [], _id: false }) device: string[]; + @prop({ required: true, default: [], _id: false }) + deviceId: string; + @prop({ required: true, default: 'com.bantu.zyz' }) pkgName: string; @@ -125,7 +128,7 @@ export default class User extends BaseModel { const userCode = genCode(8); const doc = new UserModel(); let update = {}; - update = Object.assign(update, doc.toJSON(), { platform, pkgName, serverType, createTime: curTime, uid, userCode, username: `用户${uid}`, isGuest, token, lastLoginTime: curTime, guestTime, ip }); + update = Object.assign(update, doc.toJSON(), { platform, pkgName, serverType, createTime: curTime, uid, userCode, username: `用户${uid}`, isGuest, token, lastLoginTime: curTime, guestTime, ip, deviceId }); if (isGuest) update["guestId"] = _tel; delete update["device"]; @@ -140,7 +143,7 @@ export default class User extends BaseModel { const userCode = genCode(8); const doc = new UserModel(); let update = {}; - update = Object.assign(update, doc.toJSON(), { platform, pkgName, serverType, createTime: curTime, uid, userCode, username: `用户${uid}`, token, lastLoginTime: curTime, ip, channelInfo, channelType }); + update = Object.assign(update, doc.toJSON(), { platform, pkgName, serverType, createTime: curTime, uid, userCode, username: `用户${uid}`, token, lastLoginTime: curTime, ip, channelInfo, channelType, deviceId }); delete update["device"]; const user: UserType = await UserModel.findOneAndUpdate({ channelId }, { $set: update, $addToSet: { device: deviceId } }, { upsert: true, new: true }).lean({ getters: true }); @@ -164,7 +167,7 @@ export default class User extends BaseModel { const curTime: Date = new Date(); - let user = await UserModel.findOneAndUpdate({ channelId }, { $set: { token, lastLoginTime: curTime, ip, channelInfo }, $addToSet: { device: deviceId } }, { new: true }).lean({ getters: true }); + let user = await UserModel.findOneAndUpdate({ channelId }, { $set: { token, lastLoginTime: curTime, ip, channelInfo, deviceId }, $addToSet: { device: deviceId } }, { new: true }).lean({ getters: true }); return user; } public static async updateGetuiCID(tel: string, cid: string) { @@ -180,25 +183,26 @@ export default class User extends BaseModel { public static async createOrUpdate(isGuest: boolean, tel: string, token: string, platform: string, pkgName: string, serverType: string, deviceId: string, ip: string) { // console.log(tel); - let user: UserType = await UserModel.findOne({ tel }).lean({ getters: true }); - if (!user) { - user = await UserModel.createUser(isGuest, tel, token, platform, pkgName, serverType, deviceId, 0, ip); + let oldUser: UserType = await UserModel.findOne({ tel }).lean({ getters: true }); + if (!oldUser) { + let user = await UserModel.createUser(isGuest, tel, token, platform, pkgName, serverType, deviceId, 0, ip); + return { isCreate: true, user, deviceId: null}; } else { - user = await UserModel.updateToken(tel, token, deviceId, ip); + let user = await UserModel.updateToken(tel, token, deviceId, ip); + return { isCreate: true, user, deviceId: oldUser.deviceId}; } - return user; } public static async createOrUpdateChannelUser(channelId: string, channelType: string, channelInfo: ChannelInfo, token: string, platform: string, pkgName: string, serverType: string, deviceId: string, ip: string) { // console.log(tel); - let user: UserType = await UserModel.findUserByChannel(channelId); - if (!user) { - user = await UserModel.createUserWithChannel(channelId, channelType, channelInfo, token, platform, pkgName, serverType, deviceId, ip); - return { isCreate: true, user}; + let oldUser: UserType = await UserModel.findUserByChannel(channelId); + if (!oldUser) { + let user = await UserModel.createUserWithChannel(channelId, channelType, channelInfo, token, platform, pkgName, serverType, deviceId, ip); + return { isCreate: true, user, deviceId: null}; } else { - user = await UserModel.updateTokenByChannel(channelId, token, deviceId, ip, channelInfo); - return { isCreate: false, user}; + let user = await UserModel.updateTokenByChannel(channelId, token, deviceId, ip, channelInfo); + return { isCreate: false, user, deviceId: oldUser.deviceId}; } } @@ -228,10 +232,10 @@ export default class User extends BaseModel { const curTime: Date = new Date(); let { salt } = user; let { npassword } = await this.encryptPass(password, salt); - const checkUser: UserType = await UserModel.findOneAndUpdate({ tel, password: npassword }, { $set: { token, lastLoginTime: curTime }, $addToSet: { device: deviceId } }, { new: true }).lean({ getters: true }); - return checkUser; + const checkUser: UserType = await UserModel.findOneAndUpdate({ tel, password: npassword }, { $set: { token, lastLoginTime: curTime, deviceId }, $addToSet: { device: deviceId } }, { new: true }).lean({ getters: true }); + return {user: checkUser, deviceId: user.deviceId}; } else { - return null + return {user: null, deviceId: null}; } } diff --git a/web-server/app/service/Auth.ts b/web-server/app/service/Auth.ts index 672c9f75e..8b242fe23 100644 --- a/web-server/app/service/Auth.ts +++ b/web-server/app/service/Auth.ts @@ -31,29 +31,29 @@ export default class Auth extends Service { public async deviceLogin(isGuest: boolean, token: string, deviceId: string, platform: string, pkgName: string, serverType: string, getuiCID: string) { const ctx = this.ctx; - let user = await UserModel.findUserByToken(token); + let oldUser = await UserModel.findUserByToken(token); - if (!user) { + if (!oldUser) { if (isGuest) { const tel = ctx.service.utils.genCode(10); const token = ctx.service.utils.generateStr(256); let lastGuest = await UserModel.getLastDeviceGuest(deviceId, token); if (lastGuest) { - let param = this.getReturnParam(lastGuest); + let param = this.getReturnParam(lastGuest, lastGuest.deviceId); return this.ctx.service.utils.resResult(STATUS.SUCCESS, { canLogin: true, // 未设置密码等于未创建账号 ...param }); } else { - user = await UserModel.createUser(isGuest, tel, token, platform, pkgName, serverType, deviceId, 0, ctx.clientIp); + let user = await UserModel.createUser(isGuest, tel, token, platform, pkgName, serverType, deviceId, 0, ctx.clientIp); if (getuiCID) {//更新个推cid await UserModel.updateGetuiCID(tel, getuiCID); } if(user && user.userCode) { ctx.service.utils.checkOnlineUser(user.userCode); } - let param = this.getReturnParam(user); + let param = this.getReturnParam(user, null); return this.ctx.service.utils.resResult(STATUS.SUCCESS, { canLogin: true, @@ -69,14 +69,14 @@ export default class Auth extends Service { } } else { const token = ctx.service.utils.generateStr(256); - user = await UserModel.updateToken(user.tel, token, deviceId, ctx.clientIp); + let user = await UserModel.updateToken(oldUser.tel, token, deviceId, ctx.clientIp); if (getuiCID) {//更新个推cid await UserModel.updateGetuiCID(user.tel, getuiCID); } if(user && user.userCode) { ctx.service.utils.checkOnlineUser(user.userCode); } - let param = this.getReturnParam(user); + let param = this.getReturnParam(user, oldUser.deviceId); let canLogin = true; if (!user.isGuest && !user.hasSetPw) canLogin = false; @@ -88,7 +88,7 @@ export default class Auth extends Service { } - private getReturnParam(user: UserType) { + private getReturnParam(user: UserType, deviceId: string) { let age = getAge(user.birthday); let isAdult = age >= ADULT_AGE; let todayPlayTime = user.todayPlayTime; @@ -107,7 +107,8 @@ export default class Auth extends Service { type, // 防沉迷类型 hasSetPw: user.hasSetPw, // 是否设置了密码 token: user.token, // 用户token - userCode: user.userCode // 用户标识 + userCode: user.userCode, // 用户标识 + deviceId } } @@ -223,14 +224,14 @@ export default class Auth extends Service { // 用户注册登录 const token = ctx.service.utils.generateStr(256); - const user = await UserModel.createOrUpdate(false, tel, token, platform, pkgName, serverType, deviceId, ctx.clientIp); + const {user, deviceId: oldDeviceId} = await UserModel.createOrUpdate(false, tel, token, platform, pkgName, serverType, deviceId, ctx.clientIp); if (getuiCID) {//更新个推cid await UserModel.updateGetuiCID(tel, getuiCID); } if(user && user.userCode) { ctx.service.utils.checkOnlineUser(user.userCode); } - let param = this.getReturnParam(user); + let param = this.getReturnParam(user, oldDeviceId); return ctx.service.utils.resResult(STATUS.SUCCESS, param); } @@ -261,7 +262,7 @@ export default class Auth extends Service { let user = await UserModel.setPass(uid, password); if (user) { - let param = this.getReturnParam(user); + let param = this.getReturnParam(user, user.deviceId); return ctx.service.utils.resResult(STATUS.SUCCESS, param); } else { return ctx.service.utils.resResult(STATUS.INTERNAL_ERR); @@ -287,7 +288,7 @@ export default class Auth extends Service { // 用户注册登录 const token = ctx.service.utils.generateStr(256); - const user = await UserModel.checkPass(tel, pw, token, deviceId); + const {user, deviceId: oldDeviceId} = await UserModel.checkPass(tel, pw, token, deviceId); if (!user) return ctx.service.utils.resResult(STATUS.PASSWORD_ERR); if (getuiCID) {//更新个推cid await UserModel.updateGetuiCID(tel, getuiCID); @@ -295,7 +296,7 @@ export default class Auth extends Service { if(user && user.userCode) { ctx.service.utils.checkOnlineUser(user.userCode); } - let param = this.getReturnParam(user); + let param = this.getReturnParam(user, oldDeviceId); return ctx.service.utils.resResult(STATUS.SUCCESS, { ...param }); } @@ -392,7 +393,7 @@ export default class Auth extends Service { let user = await UserModel.bindTel(ctx.uid, tel); if (!user) return ctx.service.utils.resResult(STATUS.ACCOUNT_NOT_GUEST); - let param = this.getReturnParam(user); + let param = this.getReturnParam(user, user.deviceId); return ctx.service.utils.resResult(STATUS.SUCCESS, param); } @@ -409,7 +410,7 @@ export default class Auth extends Service { let birthday = this.getBirthdayByIdCard(idNum); let user = await UserModel.authentication(ctx.uid, birthday, ''); - let param = this.getReturnParam(user); + let param = this.getReturnParam(user, user.deviceId); return ctx.service.utils.resResult(STATUS.SUCCESS, param); } @@ -440,7 +441,7 @@ export default class Auth extends Service { let channelId = getChannelId(channelType, requestResult.data.uid); const token = ctx.service.utils.generateStr(256); - let { user} = await UserModel.createOrUpdateChannelUser(channelId, channelType, { + let { user, deviceId: oldDeviceId } = await UserModel.createOrUpdateChannelUser(channelId, channelType, { ...requestResult.data, childGameId:`${childGameId}`, platformAppid }, token, platform, pkgName, serverType, deviceId, ctx.clientIp); if(user && user.userCode) { @@ -459,7 +460,8 @@ export default class Auth extends Service { channelId, token: user.token, userCode: user.userCode, - channelInfo + channelInfo, + deviceId: oldDeviceId }); }