修复迁移后错误
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
57
wwjcloud/src/common/auth/services/api/RegisterApiService.ts
Normal file
57
wwjcloud/src/common/auth/services/api/RegisterApiService.ts
Normal 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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 };
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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'] };
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user