sdk: 登录

This commit is contained in:
luying
2021-11-08 17:47:30 +08:00
parent a251ce47fa
commit fb6a5a785e
12 changed files with 291 additions and 60 deletions

View File

@@ -3,6 +3,7 @@ import { CounterModel } from './Counter';
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { genCode, aesEncryptcfb, aesDecryptcfb } from '../pubUtils/util';
import { LoginValidateData37, ChannelInfo } from '../domain/sdk';
const bcrypt = require('bcrypt');
const SALT_WORK_FACTOR = 5
@@ -18,6 +19,7 @@ class PlatForm {
*/
@index({ tel: 1 })
@index({ uid: 1 })
@index({ channelId: 1 })
export default class User extends BaseModel {
@prop({ required: true })
@@ -32,6 +34,15 @@ export default class User extends BaseModel {
@prop({ required: true })
token: string;
@prop({ required: true })
channelType: string; // 渠道类型
@prop({ required: true })
channelId: string; // 渠道类型
@prop({ required: true, _id: false })
channelInfo: LoginValidateData37|{}; // 渠道数据
@prop({ required: true, set: (val: string) => aesEncryptcfb(val, ENCRYPT_KEY, ENCRYPT_IV), get: (val: string) => aesDecryptcfb(val, ENCRYPT_KEY, ENCRYPT_IV) })
tel: string; // 账号
@@ -44,9 +55,6 @@ export default class User extends BaseModel {
@prop({ required: true })
salt: string;
@prop({ required: true, default: '' })
channelId: string;
// 游客相关
@prop({ required: false, default: false })
isGuest: boolean; // 是否是游客
@@ -123,6 +131,20 @@ export default class User extends BaseModel {
return user;
}
public static async createUserWithChannel(channelId: string, channelType: string, channelInfO: ChannelInfo, token: string, platform: string, pkgName: string, serverType: string, deviceId: string, ip: string = '') {
const curTime: Date = new Date();
const uid = await CounterModel.getNewCounter(COUNTER.UID);
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 });
delete update["device"];
const user: UserType = await UserModel.findOneAndUpdate({ channelId }, { $set: update, $addToSet: { device: deviceId } }, { upsert: true, new: true }).lean({ getters: true });
return user;
}
public static async getLastDeviceGuest(deviceId: string, token: string) {
const user: UserType = await UserModel.findOneAndUpdate({ device: { $elemMatch: { $eq: deviceId } }, isGuest: true }, { token }, { new: true }).sort({ createTime: -1 }).lean({ getters: true });
return user;
@@ -136,11 +158,23 @@ export default class User extends BaseModel {
return user;
}
public static async updateTokenByChannel(channelId: string, token: string, deviceId: string, ip: string, channelInfo: ChannelInfo) {
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 });
return user;
}
public static async updateGetuiCID(tel: string, cid: string) {
let user = await UserModel.findOneAndUpdate({ tel }, { $set: { getuiCID: cid } }, { new: true }).lean({ getters: true });
return user;
}
public static async updateGetuiCIDByChannel(channel: string, cid: string) {
let user = await UserModel.findOneAndUpdate({ channel }, { $set: { getuiCID: cid } }, { new: true }).lean({ getters: true });
return user;
}
public static async createOrUpdate(isGuest: boolean, tel: string, token: string, platform: string, pkgName: string, serverType: string, deviceId: string, ip: string) {
// console.log(tel);
@@ -153,6 +187,18 @@ export default class User extends BaseModel {
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);
} else {
user = await UserModel.updateTokenByChannel(channelId, token, deviceId, ip, channelInfo);
}
return user;
}
private static async encryptPass(password: string, salt?: string) {
if (!salt) {
salt = await bcrypt.genSalt(SALT_WORK_FACTOR);
@@ -191,6 +237,11 @@ export default class User extends BaseModel {
return user;
}
public static async findUserByChannel(channelId: string) {
const user: UserType = await UserModel.findOne({ channelId }).select('uid token serverType auth tel userCode pkgName ip').lean({ getters: true });
return user;
}
public static async findTokenByTel(tel: string) {
const user: UserType = await UserModel.findOne({ tel }).lean();
return user ? user.token : null;