forked from yoone/API
79 lines
2.1 KiB
TypeScript
79 lines
2.1 KiB
TypeScript
import {
|
|
Configuration,
|
|
App,
|
|
Inject,
|
|
MidwayDecoratorService,
|
|
} from '@midwayjs/core';
|
|
import * as koa from '@midwayjs/koa';
|
|
import * as validate from '@midwayjs/validate';
|
|
import * as info from '@midwayjs/info';
|
|
import * as orm from '@midwayjs/typeorm';
|
|
import { join } from 'path';
|
|
// import { DefaultErrorFilter } from './filter/default.filter';
|
|
// import { NotFoundFilter } from './filter/notfound.filter';
|
|
import { ReportMiddleware } from './middleware/report.middleware';
|
|
import * as swagger from '@midwayjs/swagger';
|
|
import * as crossDomain from '@midwayjs/cross-domain';
|
|
import * as cron from '@midwayjs/cron';
|
|
import * as jwt from '@midwayjs/jwt';
|
|
import { USER_KEY } from './decorator/user.decorator';
|
|
import { AuthMiddleware } from './middleware/auth.middleware';
|
|
|
|
@Configuration({
|
|
imports: [
|
|
koa,
|
|
validate,
|
|
{
|
|
component: info,
|
|
enabledEnvironment: ['local', 'prod'],
|
|
},
|
|
orm,
|
|
swagger,
|
|
crossDomain,
|
|
cron,
|
|
jwt,
|
|
],
|
|
importConfigs: [join(__dirname, './config')],
|
|
})
|
|
export class MainConfiguration {
|
|
@App('koa')
|
|
app: koa.Application;
|
|
|
|
@Inject()
|
|
decoratorService: MidwayDecoratorService;
|
|
|
|
@Inject()
|
|
jwtService: jwt.JwtService; // 注入 JwtService 实例
|
|
|
|
async onReady() {
|
|
// add middleware
|
|
this.app.useMiddleware([ReportMiddleware, AuthMiddleware]);
|
|
// add filter
|
|
// this.app.useFilter([NotFoundFilter, DefaultErrorFilter]);
|
|
|
|
this.decoratorService.registerParameterHandler(
|
|
USER_KEY,
|
|
async (
|
|
options
|
|
): Promise<{
|
|
id: number;
|
|
userName: string;
|
|
}> => {
|
|
const ctx = options.originArgs[0];
|
|
const token = ctx.headers['authorization']?.split(' ')[1];
|
|
const config = ctx.app.getConfig('jwt'); // 动态获取配置项
|
|
if (!token) {
|
|
ctx.throw(401, 'Token not found');
|
|
}
|
|
|
|
try {
|
|
const decoded: any = this.jwtService.verify(token, config.secret); // 替换为你的密钥
|
|
return decoded;
|
|
} catch (error) {
|
|
ctx.throw(401, 'Invalid token');
|
|
}
|
|
}
|
|
);
|
|
}
|
|
}
|