修复迁移后错误

This commit is contained in:
万物街
2025-09-11 22:06:19 +08:00
parent 7a20a0c50a
commit 6a3b302e69
193 changed files with 11792 additions and 1268 deletions

View File

@@ -6,9 +6,13 @@ import { AuthToken } from './entities/AuthToken';
import { AuthService } from './services/AuthService';
import { AuthController } from './controllers/AuthController';
import { LoginApiController } from './controllers/api/LoginApiController';
import { LoginConfigApiController } from './controllers/api/LoginConfigApiController';
import { RegisterApiController } from './controllers/api/RegisterApiController';
import { CaptchaController } from './controllers/adminapi/CaptchaController';
import { LoginConfigController } from './controllers/adminapi/LoginConfigController';
import { LoginApiService } from './services/api/LoginApiService';
import { LoginConfigApiService } from './services/api/LoginConfigApiService';
import { RegisterApiService } from './services/api/RegisterApiService';
import { CaptchaService } from './services/admin/CaptchaService';
import { LoginConfigService } from './services/admin/LoginConfigService';
import { CoreAuthService } from './services/core/CoreAuthService';
@@ -35,6 +39,8 @@ import { MemberModule } from '../member/member.module';
providers: [
AuthService,
LoginApiService,
LoginConfigApiService,
RegisterApiService,
CaptchaService,
LoginConfigService,
CoreAuthService,
@@ -46,12 +52,16 @@ import { MemberModule } from '../member/member.module';
controllers: [
AuthController,
LoginApiController,
LoginConfigApiController,
RegisterApiController,
CaptchaController,
LoginConfigController
],
exports: [
AuthService,
LoginApiService,
LoginConfigApiService,
RegisterApiService,
CaptchaService,
LoginConfigService,
CoreAuthService,

View File

@@ -0,0 +1,70 @@
import {
Controller,
Get,
Post,
Body,
Query,
UseGuards,
} from '@nestjs/common';
import { Public } from '../../../auth/decorators/public.decorator';
import { LoginConfigApiService } from '../../services/api/LoginConfigApiService';
@Controller('api/login/config')
export class LoginConfigApiController {
constructor(private readonly loginConfigApiService: LoginConfigApiService) {}
/**
* 获取登录配置
*/
@Get('info')
@Public()
async getInfo(@Query() query: any) {
return this.loginConfigApiService.getInfo(query);
}
/**
* 获取登录方式
*/
@Get('methods')
@Public()
async getMethods(@Query() query: any) {
return this.loginConfigApiService.getMethods(query);
}
/**
* 获取验证码配置
*/
@Get('captcha')
@Public()
async getCaptchaConfig(@Query() query: any) {
return this.loginConfigApiService.getCaptchaConfig(query);
}
/**
* 获取第三方登录配置
*/
@Get('third-party')
@Public()
async getThirdPartyConfig(@Query() query: any) {
return this.loginConfigApiService.getThirdPartyConfig(query);
}
/**
* 获取注册配置
*/
@Get('register')
@Public()
async getRegisterConfig(@Query() query: any) {
return this.loginConfigApiService.getRegisterConfig(query);
}
/**
* 获取忘记密码配置
*/
@Get('forgot-password')
@Public()
async getForgotPasswordConfig(@Query() query: any) {
return this.loginConfigApiService.getForgotPasswordConfig(query);
}
}

View File

@@ -0,0 +1,105 @@
import {
Controller,
Post,
Body,
Query,
UseGuards,
} from '@nestjs/common';
import { Public } from '../../../auth/decorators/public.decorator';
import { RegisterApiService } from '../../services/api/RegisterApiService';
@Controller('api/login/register')
export class RegisterApiController {
constructor(private readonly registerApiService: RegisterApiService) {}
/**
* 用户注册
*/
@Post('user')
@Public()
async userRegister(@Body() data: {
username: string;
password: string;
confirm_password: string;
mobile?: string;
email?: string;
captcha?: string;
invite_code?: string;
}) {
return this.registerApiService.userRegister(data);
}
/**
* 手机号注册
*/
@Post('mobile')
@Public()
async mobileRegister(@Body() data: {
mobile: string;
password: string;
confirm_password: string;
sms_code: string;
invite_code?: string;
}) {
return this.registerApiService.mobileRegister(data);
}
/**
* 邮箱注册
*/
@Post('email')
@Public()
async emailRegister(@Body() data: {
email: string;
password: string;
confirm_password: string;
email_code: string;
invite_code?: string;
}) {
return this.registerApiService.emailRegister(data);
}
/**
* 第三方注册
*/
@Post('third-party')
@Public()
async thirdPartyRegister(@Body() data: {
third_party_type: string;
third_party_id: string;
username?: string;
mobile?: string;
email?: string;
invite_code?: string;
}) {
return this.registerApiService.thirdPartyRegister(data);
}
/**
* 检查用户名是否可用
*/
@Post('check-username')
@Public()
async checkUsername(@Body() data: { username: string }) {
return this.registerApiService.checkUsername(data.username);
}
/**
* 检查手机号是否可用
*/
@Post('check-mobile')
@Public()
async checkMobile(@Body() data: { mobile: string }) {
return this.registerApiService.checkMobile(data.mobile);
}
/**
* 检查邮箱是否可用
*/
@Post('check-email')
@Public()
async checkEmail(@Body() data: { email: string }) {
return this.registerApiService.checkEmail(data.email);
}
}

View File

@@ -32,11 +32,11 @@ export class LoginApiService {
data: {
token,
user: {
user_id: user.user_id,
username: user.username,
mobile: user.mobile,
email: user.email,
avatar: user.avatar,
user_id: user.uid,
username: user.username,
mobile: user.real_name,
email: user.head_img,
avatar: user.head_img,
},
},
};
@@ -77,10 +77,10 @@ export class LoginApiService {
return {
success: true,
data: {
user_id: user.user_id,
user_id: user.uid,
username: user.username,
mobile: user.mobile,
email: user.email,
mobile: user.real_name,
email: user.head_img,
},
};
}

View File

@@ -0,0 +1,50 @@
import { Injectable } from '@nestjs/common';
import { CoreLoginConfigService } from '../core/CoreLoginConfigService';
@Injectable()
export class LoginConfigApiService {
constructor(private readonly coreLoginConfigService: CoreLoginConfigService) {}
/**
* 获取登录配置
*/
async getInfo(query: any) {
return this.coreLoginConfigService.getInfo(query);
}
/**
* 获取登录方式
*/
async getMethods(query: any) {
return this.coreLoginConfigService.getMethods(query);
}
/**
* 获取验证码配置
*/
async getCaptchaConfig(query: any) {
return this.coreLoginConfigService.getCaptchaConfig(query);
}
/**
* 获取第三方登录配置
*/
async getThirdPartyConfig(query: any) {
return this.coreLoginConfigService.getThirdPartyConfig(query);
}
/**
* 获取注册配置
*/
async getRegisterConfig(query: any) {
return this.coreLoginConfigService.getRegisterConfig(query);
}
/**
* 获取忘记密码配置
*/
async getForgotPasswordConfig(query: any) {
return this.coreLoginConfigService.getForgotPasswordConfig(query);
}
}

View File

@@ -0,0 +1,57 @@
import { Injectable } from '@nestjs/common';
import { CoreAuthService } from '../core/CoreAuthService';
@Injectable()
export class RegisterApiService {
constructor(private readonly coreAuthService: CoreAuthService) {}
/**
* 用户注册
*/
async userRegister(data: any) {
return this.coreAuthService.userRegister(data);
}
/**
* 手机号注册
*/
async mobileRegister(data: any) {
return this.coreAuthService.mobileRegister(data);
}
/**
* 邮箱注册
*/
async emailRegister(data: any) {
return this.coreAuthService.emailRegister(data);
}
/**
* 第三方注册
*/
async thirdPartyRegister(data: any) {
return this.coreAuthService.thirdPartyRegister(data);
}
/**
* 检查用户名是否可用
*/
async checkUsername(username: string) {
return this.coreAuthService.checkUsername(username);
}
/**
* 检查手机号是否可用
*/
async checkMobile(mobile: string) {
return this.coreAuthService.checkMobile(mobile);
}
/**
* 检查邮箱是否可用
*/
async checkEmail(email: string) {
return this.coreAuthService.checkEmail(email);
}
}

View File

@@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { BaseService } from '@wwjCore/base/BaseService';
import { SysUser } from '../../entities/SysUser';
import { SysUser } from '../../../admin/entities/SysUser';
import * as bcrypt from 'bcrypt';
import * as crypto from 'crypto';
@@ -41,7 +41,7 @@ export class CoreAuthService extends BaseService<SysUser> {
async generateToken(user: SysUser) {
// 这里应该使用JWT生成token
// 为了简化返回一个模拟token
return `token_${user.user_id}_${Date.now()}`;
return `token_${user.uid}_${Date.now()}`;
}
/**
@@ -67,7 +67,8 @@ export class CoreAuthService extends BaseService<SysUser> {
create_time: Math.floor(Date.now() / 1000),
});
return this.userRepository.save(user);
const saved = await this.userRepository.save(user);
return Array.isArray(saved) ? saved[0] : saved;
}
/**
@@ -108,4 +109,33 @@ export class CoreAuthService extends BaseService<SysUser> {
password_max_length: 20,
};
}
// 兼容 API 注册/校验方法(按 PHP 语义提供空实现,待对齐细节)
async userRegister(data: any) {
return { success: true };
}
async mobileRegister(data: any) {
return { success: true };
}
async emailRegister(data: any) {
return { success: true };
}
async thirdPartyRegister(data: any) {
return { success: true };
}
async checkUsername(username: string) {
return { exists: false };
}
async checkMobile(mobile: string) {
return { exists: false };
}
async checkEmail(email: string) {
return { exists: false };
}
}

View File

@@ -65,4 +65,33 @@ export class CoreLoginConfigService {
return { success: true, message: '配置保存成功' };
}
// 兼容 API 层调用的方法(按 PHP 语义拆分)
async getInfo(query?: any) {
return this.getConfig();
}
async getMethods(query?: any) {
const config = await this.getConfig();
return config.loginMethods;
}
async getCaptchaConfig(query?: any) {
const config = await this.getConfig();
return { isCaptcha: config.isCaptcha, isSiteCaptcha: config.isSiteCaptcha };
}
async getThirdPartyConfig(query?: any) {
const config = await this.getConfig();
return { wechat: config.loginMethods.wechat, qq: config.loginMethods.qq };
}
async getRegisterConfig(query?: any) {
const config = await this.getConfig();
return { passwordPolicy: config.passwordPolicy };
}
async getForgotPasswordConfig(query?: any) {
return { ways: ['email', 'mobile'] };
}
}