浏览代码

✨ feat(auth): 增加令牌过期时间自定义功能

- 修改AuthService.generateToken方法,支持自定义expiresIn参数
- 在认证集成测试中使用自定义过期时间创建短期令牌,提高测试可靠性
yourname 2 月之前
父节点
当前提交
1b796e0e7b
共有 2 个文件被更改,包括 5 次插入5 次删除
  1. 2 3
      src/server/api/auth/__tests__/auth.integration.test.ts
  2. 3 2
      src/server/modules/auth/auth.service.ts

+ 2 - 3
src/server/api/auth/__tests__/auth.integration.test.ts

@@ -176,9 +176,8 @@ describe('认证API集成测试 (使用hono/testing)', () => {
     });
 
     it('应该拒绝过期令牌', async () => {
-      // 创建过期令牌(这里需要修改JWT配置来创建过期令牌)
-      // 由于generateToken方法不支持参数,我们需要模拟一个过期令牌
-      const expiredToken = 'expired.jwt.token.here';
+      // 创建立即过期的令牌
+      const expiredToken = authService.generateToken(testUser, '1ms');
 
       // 等待令牌过期
       await new Promise(resolve => setTimeout(resolve, 10));

+ 3 - 2
src/server/modules/auth/auth.service.ts

@@ -66,13 +66,14 @@ export class AuthService {
     }
   }
 
-  generateToken(user: User): string {
+  generateToken(user: User, expiresIn?: string | number): string {
     const payload = {
       id: user.id,
       username: user.username,
       roles: user.roles?.map(role => role.name) || []
     };
-    return jwt.sign(payload, JWT_SECRET, { expiresIn: JWT_EXPIRES_IN });
+    const options = expiresIn ? { expiresIn } : { expiresIn: JWT_EXPIRES_IN };
+    return jwt.sign(payload, JWT_SECRET, options as jwt.SignOptions);
   }
 
   verifyToken(token: string): any {