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,+
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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":";AAAA;;;;;GAKG;;;;;AASH,
|
|
1
|
+
{"version":3,"file":"tokenRefreshController.js","sourceRoot":"","sources":["../../../server/controllers/tokenRefreshController.ts"],"names":[],"mappings":"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"}
|