49 lines
2.0 KiB
TypeScript
49 lines
2.0 KiB
TypeScript
import { Module } from '@nestjs/common';
|
|
import { APP_GUARD } from '@nestjs/core';
|
|
import { JwtModule } from '@nestjs/jwt';
|
|
import { ACCOUNT_READER } from './account-reader';
|
|
import { AccessTokenGuard } from './access-token.guard';
|
|
import { JwtTokenService } from './jwt-token.service';
|
|
import { DatabaseModule } from '../database/database.module';
|
|
import { AccountRepository } from './account.repository';
|
|
import {
|
|
WECHAT_FETCH,
|
|
WECHAT_DIAGNOSTICS,
|
|
WechatClient,
|
|
type WechatDiagnostics,
|
|
} from './wechat-client';
|
|
import { SERVER_CONFIG, type ServerConfig } from '../config/server-config';
|
|
import { AppLogger } from '../logging/app-logger';
|
|
import { LoginRateLimiter } from './login-rate-limiter';
|
|
import { LoginService } from './login.service';
|
|
import { LoginController } from './login.controller';
|
|
import { CurrentUserController } from './current-user.controller';
|
|
|
|
@Module({
|
|
// 签名和验证参数由 JwtTokenService 统一提供,避免不同调用点使用不同策略。
|
|
imports: [JwtModule.register({}), DatabaseModule],
|
|
controllers: [LoginController, CurrentUserController],
|
|
providers: [
|
|
JwtTokenService,
|
|
AccountRepository,
|
|
{ provide: ACCOUNT_READER, useExisting: AccountRepository },
|
|
{ provide: WECHAT_FETCH, useValue: fetch },
|
|
{
|
|
provide: WECHAT_DIAGNOSTICS,
|
|
inject: [SERVER_CONFIG],
|
|
useFactory: (config: ServerConfig): WechatDiagnostics => {
|
|
const logger = new AppLogger(config.logLevel);
|
|
return (entry) => logger.warn('wechat_exchange_failed', entry);
|
|
},
|
|
},
|
|
WechatClient,
|
|
LoginRateLimiter,
|
|
LoginService,
|
|
// 注册为全局守卫,新路由默认受保护,无需逐个添加 @UseGuards。
|
|
{ provide: APP_GUARD, useClass: AccessTokenGuard },
|
|
],
|
|
exports: [JwtTokenService, ACCOUNT_READER, AccountRepository],
|
|
})
|
|
/** 微信静默登录、本人读取与全局鉴权;身份始终来自可信微信兑换或本站凭证。 */
|
|
export class AuthModule {}
|