Selaa lähdekoodia

修改检查token的路由规则

lrf 6 kuukautta sitten
vanhempi
commit
759dd97c14
2 muutettua tiedostoa jossa 19 lisäystä ja 12 poistoa
  1. 5 4
      src/config/config.default.ts
  2. 14 8
      src/middleware/CheckToken.middleware.ts

+ 5 - 4
src/config/config.default.ts

@@ -14,11 +14,12 @@ export default {
   useCheckTokenMiddleware: true,
   /**不检查token的路由列表 */
   passToken: [
-    '/login',
+    '/login/:type',
     '/dictType',
-    '/:project/upload',
-    '/:project/:catalog/upload',
-    '/:project/:catalog/:item/upload',
+    '/files/*',
+    '/files/:project/upload',
+    '/files/:project/:catalog/upload',
+    '/files/:project/:catalog/:item/upload',
   ],
   /**请求头中token的key名 */
   tokenKey: 'token',

+ 14 - 8
src/middleware/CheckToken.middleware.ts

@@ -23,13 +23,15 @@ export class CheckTokenMiddleware
   passTokenList: Array<string>;
   @Config('tokenKey')
   tokenKey: string;
+  @Config('koa.globalPrefix')
+  globalPrefix: string;
   @Inject()
   webRouterService: MidwayWebRouterService;
   @Inject()
   jwtService: JwtService;
 
+  /** 获取tokenKey,检查header中的token是否存在,并解析出来,放到user中 */
   async analysisToken(ctx: Context) {
-    // 获取tokenKey,检查header中的token是否存在,并解析出来,放到user中
     const token: any = get(ctx.request, `header.${this.tokenKey}`);
     if (token) {
       const data = this.jwtService.decodeSync(token);
@@ -40,7 +42,16 @@ export class CheckTokenMiddleware
     }
     return token;
   }
-
+  /** 排除全局前缀的路由路径 */
+  async excludePrefixPath(ctx: Context) {
+    // 获取路由
+    const routeInfo = await this.webRouterService.getMatchedRouterInfo(
+      ctx.path,
+      ctx.method
+    );
+    const fullUrl = routeInfo.fullUrl;
+    return fullUrl.replace(this.globalPrefix, '');
+  }
   resolve() {
     return async (ctx: Context, next: NextFunction) => {
       console.log('in Middleware');
@@ -50,12 +61,7 @@ export class CheckTokenMiddleware
       } else {
         // 解析token
         token = await this.analysisToken(ctx);
-        // 获取路由
-        const routeInfo = await this.webRouterService.getMatchedRouterInfo(
-          ctx.path,
-          ctx.method
-        );
-        const path = routeInfo.url as string;
+        const path = await this.excludePrefixPath(ctx);
         // 检查路由是否在 无需检查token列表中
         if (this.passTokenList.includes(path)) {
           // 在跳过token检查中,不进行处理