sdk: 登录
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user