From 3161693bf99e07805d819758e41f6a4d6c38da99 Mon Sep 17 00:00:00 2001 From: wwj <664027523@qq.com> Date: Thu, 1 Jun 2023 17:26:13 -0700 Subject: [PATCH 1/5] feat: egg API getUserInfo --- .../server/eggJs/app/controller/user.ts | 29 ++++++++ .../template/server/eggJs/app/model/user.ts | 70 +++++++++++++++++++ .../pro/template/server/eggJs/app/router.ts | 1 + .../template/server/eggJs/app/service/user.ts | 7 ++ 4 files changed, 107 insertions(+) create mode 100644 packages/toolkits/pro/template/server/eggJs/app/controller/user.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/app/model/user.ts create mode 100644 packages/toolkits/pro/template/server/eggJs/app/service/user.ts diff --git a/packages/toolkits/pro/template/server/eggJs/app/controller/user.ts b/packages/toolkits/pro/template/server/eggJs/app/controller/user.ts new file mode 100644 index 00000000..8c10d347 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/app/controller/user.ts @@ -0,0 +1,29 @@ +import { Controller } from 'egg'; + +export default class UserController extends Controller { + // 获取用户信息 + public async getUserInfo() { + const { ctx } = this; + const { params } = ctx; + const { id } = params; + + try { + this.logger.info( + '[ controller | userInfo ] getUserInfo : 进入getUserInfo方法' + ); + const result = await ctx.service.user.getUserInfo(id); + ctx.helper.commonJson( + ctx, + { + data: result.rows, + total: result.count, + }, + 200 + ); + } catch (error) { + console.log('error', error); + // ctx.helper.exceptionHandling(ctx, error); + ctx.helper.commonJson(ctx, {}, 500, 'CM087'); + } + } +} diff --git a/packages/toolkits/pro/template/server/eggJs/app/model/user.ts b/packages/toolkits/pro/template/server/eggJs/app/model/user.ts new file mode 100644 index 00000000..87df42d8 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/app/model/user.ts @@ -0,0 +1,70 @@ +/* indent size: 4 */ + +module.exports = (app: any) => { + const DataTypes = app.Sequelize; + + const Model = app.model.define( + 'user', + { + id: { + type: DataTypes.INTEGER(20).UNSIGNED, + allowNull: false, + primaryKey: true, + }, + username: { + type: DataTypes.STRING(32), + allowNull: false, + }, + department: { + type: DataTypes.STRING(32), + allowNull: false, + }, + employeeType: { + type: DataTypes.STRING(32), + defaultValue: null, + }, + roles: { + type: DataTypes.STRING(32), + defaultValue: null, + }, + probationStart: { + type: DataTypes.DATE, + defaultValue: null, + }, + probationEnd: { + type: DataTypes.DATE, + defaultValue: null, + }, + probationDuration: { + type: DataTypes.INTEGER(11).UNSIGNED, + defaultValue: null, + }, + protocolStart: { + type: DataTypes.DATE, + defaultValue: null, + }, + protocolEnd: { + type: DataTypes.DATE, + defaultValue: null, + }, + address: { + type: DataTypes.STRING(32), + defaultValue: null, + }, + status: { + type: DataTypes.STRING(32), + defaultValue: null, + }, + }, + { + tableName: 'userinfo', + underscored: false, + freezeTableName: true, + omitNull: false, + timestamps: false, + paranoid: false, + } + ); + + return Model; +}; diff --git a/packages/toolkits/pro/template/server/eggJs/app/router.ts b/packages/toolkits/pro/template/server/eggJs/app/router.ts index def66311..790cf2ff 100644 --- a/packages/toolkits/pro/template/server/eggJs/app/router.ts +++ b/packages/toolkits/pro/template/server/eggJs/app/router.ts @@ -8,4 +8,5 @@ export default (app: Application) => { router.post('/v1/employee/getEmployee', controller.employee.getEmployee); + router.get('/v1/user/userInfo/:id', controller.user.getUserInfo); }; diff --git a/packages/toolkits/pro/template/server/eggJs/app/service/user.ts b/packages/toolkits/pro/template/server/eggJs/app/service/user.ts new file mode 100644 index 00000000..49369614 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/app/service/user.ts @@ -0,0 +1,7 @@ +import { Service } from 'egg'; + +export default class User extends Service { + public async getUserInfo(id: string): Promise { + return this.ctx.model.User.findOne({ where: { id } }); + } +} From 8f22805a1a2c5019a5b23ad9f39cbc7ab04e8403 Mon Sep 17 00:00:00 2001 From: wwj <664027523@qq.com> Date: Tue, 6 Jun 2023 02:03:29 -0700 Subject: [PATCH 2/5] feat: egg API login register --- .../server/eggJs/app/controller/user.ts | 106 ++++++++++++++++-- .../server/eggJs/app/model/registerUser.ts | 40 +++++++ .../eggJs/app/model/{user.ts => userInfo.ts} | 9 +- .../pro/template/server/eggJs/app/router.ts | 4 + .../template/server/eggJs/app/service/user.ts | 16 ++- .../server/eggJs/app/utils/bcrypt-utils.ts | 11 ++ .../server/eggJs/config/config.default.ts | 22 ++-- .../template/server/eggJs/config/plugin.ts | 8 ++ .../pro/template/server/eggJs/package.json | 3 + .../eggJs/typings/app/controller/index.d.ts | 2 + .../server/eggJs/typings/app/model/index.d.ts | 4 + .../eggJs/typings/app/service/index.d.ts | 6 +- .../server/eggJs/typings/config/plugin.d.ts | 6 +- 13 files changed, 210 insertions(+), 27 deletions(-) create mode 100644 packages/toolkits/pro/template/server/eggJs/app/model/registerUser.ts rename packages/toolkits/pro/template/server/eggJs/app/model/{user.ts => userInfo.ts} (93%) create mode 100644 packages/toolkits/pro/template/server/eggJs/app/utils/bcrypt-utils.ts diff --git a/packages/toolkits/pro/template/server/eggJs/app/controller/user.ts b/packages/toolkits/pro/template/server/eggJs/app/controller/user.ts index 8c10d347..d19888d4 100644 --- a/packages/toolkits/pro/template/server/eggJs/app/controller/user.ts +++ b/packages/toolkits/pro/template/server/eggJs/app/controller/user.ts @@ -1,29 +1,111 @@ import { Controller } from 'egg'; +import BcryptUtils from '../utils/bcrypt-utils'; export default class UserController extends Controller { + // 注册用户 + public async registerUser() { + const { ctx, app } = this; + const payload = ctx.request.body || {}; + const transaction = await ctx.model.transaction(); + try { + this.logger.info('[ controller | user ] registerUser : 进入registerUser方法'); + // 校验参数 + const registerUserRule = { + username: { type: 'email', required: true }, + password: { + type: 'string', + required: true, + allowEmpty: false, + format: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$/, + }, + }; + const err = app.validator.validate(registerUserRule, payload); + if (err?.length) { + ctx.helper.commonJson(ctx, {}, 400, 'InvalidParameter'); + return; + } + const { username, password } = payload; + // 判断用户是否已经存在 + const user = await ctx.service.user.getUserByName(username); + if (user) { + ctx.helper.commonJson(ctx, {}, 400, 'UserAlreadyExist'); + return; + } + const hash = BcryptUtils.genHash(password); + // 创建用户 + const { id } = await ctx.service.user.createUser({ username, password: hash }, { transaction }); + const userInfo = await ctx.service.user.createUserInfo({ username, id }, { transaction }); + await transaction.commit(); + ctx.helper.commonJson(ctx, userInfo, 200); + } catch (error) { + await transaction.rollback(); + console.log('error', error); + // ctx.helper.exceptionHandling(ctx, error); + ctx.helper.commonJson(ctx, {}, 500, 'InterError'); + } + } // 获取用户信息 public async getUserInfo() { const { ctx } = this; - const { params } = ctx; - const { id } = params; + const { id } = ctx.params; try { - this.logger.info( - '[ controller | userInfo ] getUserInfo : 进入getUserInfo方法' - ); - const result = await ctx.service.user.getUserInfo(id); - ctx.helper.commonJson( - ctx, + this.logger.info('[ controller | user ] getUserInfo : 进入getUserInfo方法'); + const userInfo = await ctx.service.user.getUserInfoById(id); + if (!userInfo) { + ctx.helper.commonJson(ctx, {}, 404, 'UserNotFound'); + return; + } + ctx.helper.commonJson(ctx, userInfo, 200); + } catch (error) { + console.log('error', error); + // ctx.helper.exceptionHandling(ctx, error); + ctx.helper.commonJson(ctx, {}, 500, 'InterError'); + } + } + + // 登录 + public async login() { + const { ctx, app } = this; + const payload = ctx.request.body || {}; + try { + this.logger.info('[ controller | user ] login : 进入login方法'); + // 校验参数格式 + const err = app.validator.validate( { - data: result.rows, - total: result.count, + username: { type: 'email', required: true }, + password: { type: 'string', required: true, allowEmpty: false }, }, - 200 + payload, ); + if (err?.length) { + ctx.helper.commonJson(ctx, {}, 400, 'InvalidParameter'); + return; + } + + // 用户是否存在 + const user = await ctx.service.user.getUserByName(payload.username); + if (!user) { + ctx.helper.commonJson(ctx, {}, 400, 'UserNotFound'); + return; + } + + // 密码是否正确 + const match = BcryptUtils.compare(payload.password, user.password); + if (!match) { + ctx.helper.commonJson(ctx, {}, 401, 'ErrorPassword'); + return; + } + + // 生成Token + const { secret, sign } = this.app.config.jwt; + const userInfo = await ctx.service.user.getUserInfoById(user.id); + const token = this.app.jwt.sign(userInfo.dataValues, secret, sign); + ctx.helper.commonJson(ctx, { token }, 200); } catch (error) { console.log('error', error); // ctx.helper.exceptionHandling(ctx, error); - ctx.helper.commonJson(ctx, {}, 500, 'CM087'); + ctx.helper.commonJson(ctx, {}, 500, 'InterError'); } } } diff --git a/packages/toolkits/pro/template/server/eggJs/app/model/registerUser.ts b/packages/toolkits/pro/template/server/eggJs/app/model/registerUser.ts new file mode 100644 index 00000000..547b7f1e --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/app/model/registerUser.ts @@ -0,0 +1,40 @@ +/* indent size: 4 */ + +module.exports = (app: any) => { + const DataTypes = app.Sequelize; + + const RegisterUser = app.model.define( + 'RegisterUser', + { + id: { + type: DataTypes.INTEGER(20).UNSIGNED, + allowNull: false, + primaryKey: true, + autoIncrement: true, + }, + username: { + type: DataTypes.STRING(32), + allowNull: false, + }, + password: { + type: DataTypes.STRING(32), + allowNull: false, + }, + loginType: { + type: DataTypes.ENUM('account', 'email'), + allowNull: false, + defaultValue: 'account', + }, + }, + { + tableName: 'registeruser', + underscored: false, + freezeTableName: true, + omitNull: false, + timestamps: false, + paranoid: false, + }, + ); + + return RegisterUser; +}; diff --git a/packages/toolkits/pro/template/server/eggJs/app/model/user.ts b/packages/toolkits/pro/template/server/eggJs/app/model/userInfo.ts similarity index 93% rename from packages/toolkits/pro/template/server/eggJs/app/model/user.ts rename to packages/toolkits/pro/template/server/eggJs/app/model/userInfo.ts index 87df42d8..4b00237e 100644 --- a/packages/toolkits/pro/template/server/eggJs/app/model/user.ts +++ b/packages/toolkits/pro/template/server/eggJs/app/model/userInfo.ts @@ -3,8 +3,8 @@ module.exports = (app: any) => { const DataTypes = app.Sequelize; - const Model = app.model.define( - 'user', + const UserInfo = app.model.define( + 'UserInfo', { id: { type: DataTypes.INTEGER(20).UNSIGNED, @@ -18,6 +18,7 @@ module.exports = (app: any) => { department: { type: DataTypes.STRING(32), allowNull: false, + defaultValue: '', }, employeeType: { type: DataTypes.STRING(32), @@ -63,8 +64,8 @@ module.exports = (app: any) => { omitNull: false, timestamps: false, paranoid: false, - } + }, ); - return Model; + return UserInfo; }; diff --git a/packages/toolkits/pro/template/server/eggJs/app/router.ts b/packages/toolkits/pro/template/server/eggJs/app/router.ts index 790cf2ff..ac367f33 100644 --- a/packages/toolkits/pro/template/server/eggJs/app/router.ts +++ b/packages/toolkits/pro/template/server/eggJs/app/router.ts @@ -8,5 +8,9 @@ export default (app: Application) => { router.post('/v1/employee/getEmployee', controller.employee.getEmployee); + router.post('/v1/user/register', controller.user.registerUser); + router.get('/v1/user/userInfo/:id', controller.user.getUserInfo); + + router.post('/v1/user/login', controller.user.login); }; diff --git a/packages/toolkits/pro/template/server/eggJs/app/service/user.ts b/packages/toolkits/pro/template/server/eggJs/app/service/user.ts index 49369614..a51846c0 100644 --- a/packages/toolkits/pro/template/server/eggJs/app/service/user.ts +++ b/packages/toolkits/pro/template/server/eggJs/app/service/user.ts @@ -1,7 +1,19 @@ import { Service } from 'egg'; export default class User extends Service { - public async getUserInfo(id: string): Promise { - return this.ctx.model.User.findOne({ where: { id } }); + public async getUserInfoById(id: string): Promise { + return this.ctx.model.UserInfo.findOne({ where: { id } }); + } + + public async getUserByName(username: string): Promise { + return this.ctx.model.RegisterUser.findOne({ where: { username } }); + } + + public async createUser(params: { username: string; password: string }, options?): Promise { + return this.ctx.model.RegisterUser.create(params, options); + } + + public async createUserInfo(info, options?): Promise { + return this.ctx.model.UserInfo.create(info, options); } } diff --git a/packages/toolkits/pro/template/server/eggJs/app/utils/bcrypt-utils.ts b/packages/toolkits/pro/template/server/eggJs/app/utils/bcrypt-utils.ts new file mode 100644 index 00000000..7d8402c2 --- /dev/null +++ b/packages/toolkits/pro/template/server/eggJs/app/utils/bcrypt-utils.ts @@ -0,0 +1,11 @@ +import * as bcrypt from 'bcrypt'; + +export default class BcryptUtils { + private static saltRounds = 10; + public static genHash(password: string): string { + return bcrypt.hashSync(password, this.saltRounds); + } + public static compare(password: string, encrypted: string): boolean { + return bcrypt.compareSync(password, encrypted); + } +} diff --git a/packages/toolkits/pro/template/server/eggJs/config/config.default.ts b/packages/toolkits/pro/template/server/eggJs/config/config.default.ts index 0d15788e..a88c5e2a 100644 --- a/packages/toolkits/pro/template/server/eggJs/config/config.default.ts +++ b/packages/toolkits/pro/template/server/eggJs/config/config.default.ts @@ -17,18 +17,26 @@ export default (appInfo: EggAppInfo) => { username: 'root', password: '123456', define: { - timestamps: true, - freezeTableName: true, - underscored: false, - createdAt: 'created_at', - updatedAt: 'updated_at', + timestamps: true, + freezeTableName: true, + underscored: false, + createdAt: 'created_at', + updatedAt: 'updated_at', }, timezone: '+08:00', - database: 'tiny_server_test' + database: 'tiny_server_test', }; + config.jwt = { + enable: true, + ignore: /user\/(login|register)/, + secret: 'open_tiny_server', + sign: { + expiresIn: 60 * 60 * 24, + }, + }; // the return config will combines to EggAppConfig return { - ...config + ...config, }; }; diff --git a/packages/toolkits/pro/template/server/eggJs/config/plugin.ts b/packages/toolkits/pro/template/server/eggJs/config/plugin.ts index 3231533b..339fc53e 100644 --- a/packages/toolkits/pro/template/server/eggJs/config/plugin.ts +++ b/packages/toolkits/pro/template/server/eggJs/config/plugin.ts @@ -5,6 +5,14 @@ const plugin: EggPlugin = { enable: true, package: 'egg-sequelize', }, + validate: { + enable: true, + package: 'egg-validate', + }, + jwt: { + enable: true, + package: 'egg-jwt', + }, }; export default plugin; diff --git a/packages/toolkits/pro/template/server/eggJs/package.json b/packages/toolkits/pro/template/server/eggJs/package.json index f8b3eacf..ba6603c2 100644 --- a/packages/toolkits/pro/template/server/eggJs/package.json +++ b/packages/toolkits/pro/template/server/eggJs/package.json @@ -21,9 +21,12 @@ "clean": "ets clean" }, "dependencies": { + "bcrypt": "^5.1.0", "egg": "^2.6.1", + "egg-jwt": "^3.1.7", "egg-scripts": "^2.6.0", "egg-sequelize": "^5.2.2", + "egg-validate": "^2.0.2", "mysql2": "^2.1.0" }, "devDependencies": { diff --git a/packages/toolkits/pro/template/server/eggJs/typings/app/controller/index.d.ts b/packages/toolkits/pro/template/server/eggJs/typings/app/controller/index.d.ts index 300fc60b..7b3d702e 100644 --- a/packages/toolkits/pro/template/server/eggJs/typings/app/controller/index.d.ts +++ b/packages/toolkits/pro/template/server/eggJs/typings/app/controller/index.d.ts @@ -4,9 +4,11 @@ import 'egg'; import ExportEmployee from '../../../app/controller/employee'; +import ExportUser from '../../../app/controller/user'; declare module 'egg' { interface IController { employee: ExportEmployee; + user: ExportUser; } } diff --git a/packages/toolkits/pro/template/server/eggJs/typings/app/model/index.d.ts b/packages/toolkits/pro/template/server/eggJs/typings/app/model/index.d.ts index 13833dec..64e03fb6 100644 --- a/packages/toolkits/pro/template/server/eggJs/typings/app/model/index.d.ts +++ b/packages/toolkits/pro/template/server/eggJs/typings/app/model/index.d.ts @@ -4,9 +4,13 @@ import 'egg'; import ExportEmployee from '../../../app/model/employee'; +import ExportRegisterUser from '../../../app/model/registerUser'; +import ExportUserInfo from '../../../app/model/userInfo'; declare module 'egg' { interface IModel { Employee: ReturnType; + RegisterUser: ReturnType; + UserInfo: ReturnType; } } diff --git a/packages/toolkits/pro/template/server/eggJs/typings/app/service/index.d.ts b/packages/toolkits/pro/template/server/eggJs/typings/app/service/index.d.ts index 567c6c80..2b4b63c3 100644 --- a/packages/toolkits/pro/template/server/eggJs/typings/app/service/index.d.ts +++ b/packages/toolkits/pro/template/server/eggJs/typings/app/service/index.d.ts @@ -6,11 +6,15 @@ import 'egg'; type AnyClass = new (...args: any[]) => any; type AnyFunc = (...args: any[]) => T; type CanExportFunc = AnyFunc> | AnyFunc>; -type AutoInstanceType : T> = U extends AnyClass ? InstanceType : U; +type AutoInstanceType : T> = U extends AnyClass + ? InstanceType + : U; import ExportEmployee from '../../../app/service/employee'; +import ExportUser from '../../../app/service/user'; declare module 'egg' { interface IService { employee: AutoInstanceType; + user: AutoInstanceType; } } diff --git a/packages/toolkits/pro/template/server/eggJs/typings/config/plugin.d.ts b/packages/toolkits/pro/template/server/eggJs/typings/config/plugin.d.ts index c8f1c015..c69277df 100644 --- a/packages/toolkits/pro/template/server/eggJs/typings/config/plugin.d.ts +++ b/packages/toolkits/pro/template/server/eggJs/typings/config/plugin.d.ts @@ -16,6 +16,8 @@ import 'egg-static'; import 'egg-jsonp'; import 'egg-view'; import 'egg-sequelize'; +import 'egg-validate'; +import 'egg-jwt'; import { EggPluginItem } from 'egg'; declare module 'egg' { interface EggPlugin { @@ -32,5 +34,7 @@ declare module 'egg' { jsonp?: EggPluginItem; view?: EggPluginItem; sequelize?: EggPluginItem; + validate?: EggPluginItem; + jwt?: EggPluginItem; } -} \ No newline at end of file +} From e01693fd3800ca37bef334033bc34725021b1efe Mon Sep 17 00:00:00 2001 From: wwj <664027523@qq.com> Date: Tue, 6 Jun 2023 19:18:29 -0700 Subject: [PATCH 3/5] fix: fix err code --- .../server/eggJs/app/controller/user.ts | 26 +++++++------------ .../server/eggJs/app/model/registerUser.ts | 4 +-- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/packages/toolkits/pro/template/server/eggJs/app/controller/user.ts b/packages/toolkits/pro/template/server/eggJs/app/controller/user.ts index d19888d4..2cf35c71 100644 --- a/packages/toolkits/pro/template/server/eggJs/app/controller/user.ts +++ b/packages/toolkits/pro/template/server/eggJs/app/controller/user.ts @@ -11,24 +11,22 @@ export default class UserController extends Controller { this.logger.info('[ controller | user ] registerUser : 进入registerUser方法'); // 校验参数 const registerUserRule = { - username: { type: 'email', required: true }, + username: { type: 'email' }, password: { type: 'string', - required: true, - allowEmpty: false, format: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$/, }, }; const err = app.validator.validate(registerUserRule, payload); if (err?.length) { - ctx.helper.commonJson(ctx, {}, 400, 'InvalidParameter'); + ctx.helper.commonJson(ctx, {}, 500, 'InvalidParameter'); return; } const { username, password } = payload; // 判断用户是否已经存在 const user = await ctx.service.user.getUserByName(username); if (user) { - ctx.helper.commonJson(ctx, {}, 400, 'UserAlreadyExist'); + ctx.helper.commonJson(ctx, {}, 500, 'UserAlreadyExist'); return; } const hash = BcryptUtils.genHash(password); @@ -39,8 +37,6 @@ export default class UserController extends Controller { ctx.helper.commonJson(ctx, userInfo, 200); } catch (error) { await transaction.rollback(); - console.log('error', error); - // ctx.helper.exceptionHandling(ctx, error); ctx.helper.commonJson(ctx, {}, 500, 'InterError'); } } @@ -53,13 +49,11 @@ export default class UserController extends Controller { this.logger.info('[ controller | user ] getUserInfo : 进入getUserInfo方法'); const userInfo = await ctx.service.user.getUserInfoById(id); if (!userInfo) { - ctx.helper.commonJson(ctx, {}, 404, 'UserNotFound'); + ctx.helper.commonJson(ctx, {}, 500, 'UserNotFound'); return; } ctx.helper.commonJson(ctx, userInfo, 200); } catch (error) { - console.log('error', error); - // ctx.helper.exceptionHandling(ctx, error); ctx.helper.commonJson(ctx, {}, 500, 'InterError'); } } @@ -73,27 +67,27 @@ export default class UserController extends Controller { // 校验参数格式 const err = app.validator.validate( { - username: { type: 'email', required: true }, - password: { type: 'string', required: true, allowEmpty: false }, + username: { type: 'email' }, + password: { type: 'string' }, }, payload, ); if (err?.length) { - ctx.helper.commonJson(ctx, {}, 400, 'InvalidParameter'); + ctx.helper.commonJson(ctx, {}, 500, 'InvalidParameter'); return; } // 用户是否存在 const user = await ctx.service.user.getUserByName(payload.username); if (!user) { - ctx.helper.commonJson(ctx, {}, 400, 'UserNotFound'); + ctx.helper.commonJson(ctx, {}, 500, 'UserNotFound'); return; } // 密码是否正确 const match = BcryptUtils.compare(payload.password, user.password); if (!match) { - ctx.helper.commonJson(ctx, {}, 401, 'ErrorPassword'); + ctx.helper.commonJson(ctx, {}, 500, 'ErrorPassword'); return; } @@ -103,8 +97,6 @@ export default class UserController extends Controller { const token = this.app.jwt.sign(userInfo.dataValues, secret, sign); ctx.helper.commonJson(ctx, { token }, 200); } catch (error) { - console.log('error', error); - // ctx.helper.exceptionHandling(ctx, error); ctx.helper.commonJson(ctx, {}, 500, 'InterError'); } } diff --git a/packages/toolkits/pro/template/server/eggJs/app/model/registerUser.ts b/packages/toolkits/pro/template/server/eggJs/app/model/registerUser.ts index 547b7f1e..ffb6a167 100644 --- a/packages/toolkits/pro/template/server/eggJs/app/model/registerUser.ts +++ b/packages/toolkits/pro/template/server/eggJs/app/model/registerUser.ts @@ -17,13 +17,13 @@ module.exports = (app: any) => { allowNull: false, }, password: { - type: DataTypes.STRING(32), + type: DataTypes.STRING(60), allowNull: false, }, loginType: { type: DataTypes.ENUM('account', 'email'), allowNull: false, - defaultValue: 'account', + defaultValue: 'email', }, }, { From 8e7497efa123875a8de25b7f90473ad8c694eb3e Mon Sep 17 00:00:00 2001 From: wwj <664027523@qq.com> Date: Wed, 7 Jun 2023 00:32:04 -0700 Subject: [PATCH 4/5] fix: fix PR suggestion --- .../server/eggJs/app/controller/user.ts | 17 +++++++++-------- .../server/eggJs/app/model/registerUser.ts | 6 +++--- .../server/eggJs/app/model/userInfo.ts | 19 ++++++++++++------- .../template/server/eggJs/app/service/user.ts | 10 +++++----- .../server/eggJs/config/config.default.ts | 2 +- .../eggJs/typings/app/controller/index.d.ts | 2 ++ 6 files changed, 32 insertions(+), 24 deletions(-) diff --git a/packages/toolkits/pro/template/server/eggJs/app/controller/user.ts b/packages/toolkits/pro/template/server/eggJs/app/controller/user.ts index 2cf35c71..d89e4b6a 100644 --- a/packages/toolkits/pro/template/server/eggJs/app/controller/user.ts +++ b/packages/toolkits/pro/template/server/eggJs/app/controller/user.ts @@ -11,7 +11,7 @@ export default class UserController extends Controller { this.logger.info('[ controller | user ] registerUser : 进入registerUser方法'); // 校验参数 const registerUserRule = { - username: { type: 'email' }, + user_name: { type: 'email' }, password: { type: 'string', format: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$/, @@ -22,17 +22,17 @@ export default class UserController extends Controller { ctx.helper.commonJson(ctx, {}, 500, 'InvalidParameter'); return; } - const { username, password } = payload; + const { user_name, password } = payload; // 判断用户是否已经存在 - const user = await ctx.service.user.getUserByName(username); + const user = await ctx.service.user.getUserByName(user_name); if (user) { ctx.helper.commonJson(ctx, {}, 500, 'UserAlreadyExist'); return; } const hash = BcryptUtils.genHash(password); // 创建用户 - const { id } = await ctx.service.user.createUser({ username, password: hash }, { transaction }); - const userInfo = await ctx.service.user.createUserInfo({ username, id }, { transaction }); + const { id } = await ctx.service.user.createUser({ user_name, password: hash }, { transaction }); + const userInfo = await ctx.service.user.createUserInfo({ user_name, user_id: id }, { transaction }); await transaction.commit(); ctx.helper.commonJson(ctx, userInfo, 200); } catch (error) { @@ -40,6 +40,7 @@ export default class UserController extends Controller { ctx.helper.commonJson(ctx, {}, 500, 'InterError'); } } + // 获取用户信息 public async getUserInfo() { const { ctx } = this; @@ -67,7 +68,7 @@ export default class UserController extends Controller { // 校验参数格式 const err = app.validator.validate( { - username: { type: 'email' }, + user_name: { type: 'email' }, password: { type: 'string' }, }, payload, @@ -78,7 +79,7 @@ export default class UserController extends Controller { } // 用户是否存在 - const user = await ctx.service.user.getUserByName(payload.username); + const user = await ctx.service.user.getUserByName(payload.user_name); if (!user) { ctx.helper.commonJson(ctx, {}, 500, 'UserNotFound'); return; @@ -94,7 +95,7 @@ export default class UserController extends Controller { // 生成Token const { secret, sign } = this.app.config.jwt; const userInfo = await ctx.service.user.getUserInfoById(user.id); - const token = this.app.jwt.sign(userInfo.dataValues, secret, sign); + const token = this.app.jwt.sign(userInfo, secret, sign); ctx.helper.commonJson(ctx, { token }, 200); } catch (error) { ctx.helper.commonJson(ctx, {}, 500, 'InterError'); diff --git a/packages/toolkits/pro/template/server/eggJs/app/model/registerUser.ts b/packages/toolkits/pro/template/server/eggJs/app/model/registerUser.ts index ffb6a167..79563106 100644 --- a/packages/toolkits/pro/template/server/eggJs/app/model/registerUser.ts +++ b/packages/toolkits/pro/template/server/eggJs/app/model/registerUser.ts @@ -12,7 +12,7 @@ module.exports = (app: any) => { primaryKey: true, autoIncrement: true, }, - username: { + user_name: { type: DataTypes.STRING(32), allowNull: false, }, @@ -20,8 +20,8 @@ module.exports = (app: any) => { type: DataTypes.STRING(60), allowNull: false, }, - loginType: { - type: DataTypes.ENUM('account', 'email'), + register_type: { + type: DataTypes.ENUM('email'), allowNull: false, defaultValue: 'email', }, diff --git a/packages/toolkits/pro/template/server/eggJs/app/model/userInfo.ts b/packages/toolkits/pro/template/server/eggJs/app/model/userInfo.ts index 4b00237e..24d0bea5 100644 --- a/packages/toolkits/pro/template/server/eggJs/app/model/userInfo.ts +++ b/packages/toolkits/pro/template/server/eggJs/app/model/userInfo.ts @@ -10,17 +10,22 @@ module.exports = (app: any) => { type: DataTypes.INTEGER(20).UNSIGNED, allowNull: false, primaryKey: true, + autoIncrement: true, }, - username: { + user_name: { type: DataTypes.STRING(32), allowNull: false, }, + user_id: { + type: DataTypes.INTEGER(20), + allowNull: false, + }, department: { type: DataTypes.STRING(32), allowNull: false, defaultValue: '', }, - employeeType: { + employee_type: { type: DataTypes.STRING(32), defaultValue: null, }, @@ -28,23 +33,23 @@ module.exports = (app: any) => { type: DataTypes.STRING(32), defaultValue: null, }, - probationStart: { + probation_start: { type: DataTypes.DATE, defaultValue: null, }, - probationEnd: { + probation_end: { type: DataTypes.DATE, defaultValue: null, }, - probationDuration: { + probation_duration: { type: DataTypes.INTEGER(11).UNSIGNED, defaultValue: null, }, - protocolStart: { + protocol_start: { type: DataTypes.DATE, defaultValue: null, }, - protocolEnd: { + protocol_end: { type: DataTypes.DATE, defaultValue: null, }, diff --git a/packages/toolkits/pro/template/server/eggJs/app/service/user.ts b/packages/toolkits/pro/template/server/eggJs/app/service/user.ts index a51846c0..87ce9270 100644 --- a/packages/toolkits/pro/template/server/eggJs/app/service/user.ts +++ b/packages/toolkits/pro/template/server/eggJs/app/service/user.ts @@ -1,15 +1,15 @@ import { Service } from 'egg'; export default class User extends Service { - public async getUserInfoById(id: string): Promise { - return this.ctx.model.UserInfo.findOne({ where: { id } }); + public async getUserInfoById(user_id: string): Promise { + return this.ctx.model.UserInfo.findOne({ where: { user_id }, raw: true }); } - public async getUserByName(username: string): Promise { - return this.ctx.model.RegisterUser.findOne({ where: { username } }); + public async getUserByName(user_name: string): Promise { + return this.ctx.model.RegisterUser.findOne({ where: { user_name } }); } - public async createUser(params: { username: string; password: string }, options?): Promise { + public async createUser(params: { user_name: string; password: string }, options?): Promise { return this.ctx.model.RegisterUser.create(params, options); } diff --git a/packages/toolkits/pro/template/server/eggJs/config/config.default.ts b/packages/toolkits/pro/template/server/eggJs/config/config.default.ts index a88c5e2a..7638f9b8 100644 --- a/packages/toolkits/pro/template/server/eggJs/config/config.default.ts +++ b/packages/toolkits/pro/template/server/eggJs/config/config.default.ts @@ -30,7 +30,7 @@ export default (appInfo: EggAppInfo) => { config.jwt = { enable: true, ignore: /user\/(login|register)/, - secret: 'open_tiny_server', + secret: 'tiny_pro_server', sign: { expiresIn: 60 * 60 * 24, }, diff --git a/packages/toolkits/pro/template/server/eggJs/typings/app/controller/index.d.ts b/packages/toolkits/pro/template/server/eggJs/typings/app/controller/index.d.ts index 7b3d702e..0f64d8a4 100644 --- a/packages/toolkits/pro/template/server/eggJs/typings/app/controller/index.d.ts +++ b/packages/toolkits/pro/template/server/eggJs/typings/app/controller/index.d.ts @@ -3,11 +3,13 @@ /* eslint-disable */ import 'egg'; +import ExportCsrf from '../../../app/controller/csrf'; import ExportEmployee from '../../../app/controller/employee'; import ExportUser from '../../../app/controller/user'; declare module 'egg' { interface IController { + csrf: ExportCsrf; employee: ExportEmployee; user: ExportUser; } From ba7eb419f4a868d7aae8351022c138c44ad81a55 Mon Sep 17 00:00:00 2001 From: wwj <664027523@qq.com> Date: Wed, 7 Jun 2023 00:42:36 -0700 Subject: [PATCH 5/5] fix: fix database name --- .../toolkits/pro/template/server/eggJs/config/config.default.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolkits/pro/template/server/eggJs/config/config.default.ts b/packages/toolkits/pro/template/server/eggJs/config/config.default.ts index 7638f9b8..e171277a 100644 --- a/packages/toolkits/pro/template/server/eggJs/config/config.default.ts +++ b/packages/toolkits/pro/template/server/eggJs/config/config.default.ts @@ -24,7 +24,7 @@ export default (appInfo: EggAppInfo) => { updatedAt: 'updated_at', }, timezone: '+08:00', - database: 'tiny_server_test', + database: 'tiny_pro_server', }; config.jwt = {