sumor 3.0.4 → 3.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"tokenRefreshController.d.ts","sourceRoot":"","sources":["../../../server/controllers/tokenRefreshController.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAO3C,wBAA8B,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,+CAyE/E"}
1
+ {"version":3,"file":"tokenRefreshController.d.ts","sourceRoot":"","sources":["../../../server/controllers/tokenRefreshController.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAO3C,wBAA8B,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,+CA6E/E"}
@@ -16,6 +16,13 @@ const tokenModel_1 = require("../models/tokenModel");
16
16
  const config_1 = require("../utils/config");
17
17
  const authorizationUrlGenerator_1 = require("../utils/authorizationUrlGenerator");
18
18
  async function tokenRefreshController(req, res) {
19
+ const config = (0, config_1.getOAuthConfig)();
20
+ const oauthAuthorizeUrl = (0, authorizationUrlGenerator_1.generateAuthorizationUrl)();
21
+ // 初始化响应变量
22
+ let statusCode = 200;
23
+ let code = 'OK';
24
+ let message = '未登录';
25
+ let user = null;
19
26
  try {
20
27
  // 仅支持驼峰格式(refreshToken)
21
28
  // 从请求体中获取 refreshToken(优先级高)
@@ -24,62 +31,60 @@ async function tokenRefreshController(req, res) {
24
31
  if (!refreshToken) {
25
32
  refreshToken = req.cookies?.refresh_token;
26
33
  }
27
- if (!refreshToken) {
28
- return res.status(400).json({
29
- code: 'ERROR',
30
- message: '缺少 refreshToken 参数'
31
- });
32
- }
33
- // 使用 OAuthService 调用 ITS API
34
- const oauthService = new oauthService_1.default();
35
- const tokenData = await oauthService.refreshAccessToken(refreshToken);
36
- // 使用公用的 token 设置函数
37
- // 设置新的 accessToken
38
- (0, oauthTokenUtils_1.setOAuthTokenCookie)(res, tokenData.accessToken, tokenData.expiresIn, 'access');
39
- // 如果返回了新的 refreshToken,也设置上
40
- // PUT /token 通常不返回新的 refreshToken,但为了保险起见检查
41
- if (tokenData.refreshToken && tokenData.refreshToken !== refreshToken) {
42
- (0, oauthTokenUtils_1.setOAuthTokenCookie)(res, tokenData.refreshToken, 2592000, 'refresh'); // 30 days
43
- }
44
- // 验证新的 accessToken 获取用户信息
45
- let user = null;
46
- try {
47
- const tokenModel = (0, tokenModel_1.getTokenModel)();
48
- const claims = await tokenModel.verify(tokenData.accessToken);
49
- if (claims.sub) {
50
- user = {
51
- id: claims.sub,
52
- isVerified: claims.isVerified || 0,
53
- roles: claims.roles || '',
54
- permissions: claims.permissions || ''
55
- };
34
+ // 如果有有效的 refreshToken,进行刷新
35
+ if (refreshToken) {
36
+ // 使用 OAuthService 调用 ITS API
37
+ const oauthService = new oauthService_1.default();
38
+ const tokenData = await oauthService.refreshAccessToken(refreshToken);
39
+ // 使用公用的 token 设置函数
40
+ // 设置新的 accessToken
41
+ (0, oauthTokenUtils_1.setOAuthTokenCookie)(res, tokenData.accessToken, tokenData.expiresIn, 'access');
42
+ // 如果返回了新的 refreshToken,也设置上
43
+ // PUT /token 通常不返回新的 refreshToken,但为了保险起见检查
44
+ if (tokenData.refreshToken && tokenData.refreshToken !== refreshToken) {
45
+ (0, oauthTokenUtils_1.setOAuthTokenCookie)(res, tokenData.refreshToken, 2592000, 'refresh'); // 30 days
56
46
  }
57
- }
58
- catch (error) {
59
- // Token 验证失败,返回 null user
60
- console.error('Failed to verify new token:', error);
61
- }
62
- // 返回用户信息供客户端使用
63
- // Token 已通过 HttpOnly Cookie 设置,响应中包含 user 信息用于更新客户端状态
64
- const config = (0, config_1.getOAuthConfig)();
65
- const oauthAuthorizeUrl = (0, authorizationUrlGenerator_1.generateAuthorizationUrl)();
66
- res.status(200).json({
67
- code: 'OK',
68
- message: 'Token 刷新成功',
69
- data: {
70
- endpoint: config.endpoint,
71
- authorizeUrl: oauthAuthorizeUrl,
72
- user
47
+ // 验证新的 accessToken 获取用户信息
48
+ try {
49
+ const tokenModel = (0, tokenModel_1.getTokenModel)();
50
+ const claims = await tokenModel.verify(tokenData.accessToken);
51
+ if (claims.sub) {
52
+ user = {
53
+ id: claims.sub,
54
+ isVerified: claims.isVerified || 0,
55
+ roles: claims.roles || '',
56
+ permissions: claims.permissions || ''
57
+ };
58
+ }
73
59
  }
74
- });
60
+ catch (error) {
61
+ // Token 验证失败,返回 null user
62
+ console.error('Failed to verify new token:', error);
63
+ }
64
+ // 更新消息为成功登录状态
65
+ message = 'Token 刷新成功';
66
+ }
75
67
  }
76
68
  catch (error) {
77
- const status = error.response?.status || 500;
78
- const errorMessage = error.message || 'Token 刷新失败';
79
- res.status(status).json({
80
- code: 'ERROR',
81
- message: errorMessage
82
- });
69
+ // token 刷新失败时(如 401 未授权),返回授权 URL 而不是错误
70
+ if (error.code === 'REFRESH_TOKEN_FAILED' || error.response?.status === 401) {
71
+ message = 'Token 已过期或无效';
72
+ }
73
+ else {
74
+ // 其他异常错误
75
+ statusCode = error.response?.status || 500;
76
+ code = 'ERROR';
77
+ message = error.message || 'Token 刷新失败';
78
+ }
83
79
  }
80
+ return res.status(statusCode).json({
81
+ code,
82
+ message,
83
+ data: {
84
+ endpoint: config.endpoint,
85
+ authorizeUrl: oauthAuthorizeUrl,
86
+ user
87
+ }
88
+ });
84
89
  }
85
90
  //# sourceMappingURL=tokenRefreshController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokenRefreshController.js","sourceRoot":"","sources":["../../../server/controllers/tokenRefreshController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokenRefreshController.js","sourceRoot":"","sources":["../../../server/controllers/tokenRefreshController.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sumor",
3
- "version": "3.0.4",
3
+ "version": "3.0.5",
4
4
  "description": "Sumor OAuth framework",
5
5
  "main": "dist/server/index.js",
6
6
  "types": "dist/server/index.d.ts",