@cicctencent/midwayjs-base 1.0.18 → 1.0.19
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.
|
@@ -24,5 +24,7 @@ export declare class BaseService {
|
|
|
24
24
|
* @param option
|
|
25
25
|
*/
|
|
26
26
|
requestBaseApi<T extends response>(req: request | string, option?: AxiosRequestConfig): Promise<T>;
|
|
27
|
-
requestBaseServer<T extends any>(req: request | string, option?: AxiosRequestConfig
|
|
27
|
+
requestBaseServer<T extends any>(req: request | string, option?: AxiosRequestConfig & {
|
|
28
|
+
accessKey?: string;
|
|
29
|
+
}): Promise<AxiosResponse<any, T>>;
|
|
28
30
|
}
|
|
@@ -40,11 +40,12 @@ class BaseService {
|
|
|
40
40
|
option = {
|
|
41
41
|
method: 'POST',
|
|
42
42
|
baseURL: this.baseServiceOption.url,
|
|
43
|
+
accessKey: this.apiOption?.key || '',
|
|
43
44
|
...option,
|
|
44
45
|
};
|
|
45
46
|
const headers = option.headers || {};
|
|
46
|
-
if (
|
|
47
|
-
const thisToken = api_1.default.createApiToken(
|
|
47
|
+
if (option.accessKey) {
|
|
48
|
+
const thisToken = api_1.default.createApiToken(option.accessKey);
|
|
48
49
|
headers['x-api-token'] = thisToken.sign;
|
|
49
50
|
headers['x-api-timestamp'] = thisToken.timestamp;
|
|
50
51
|
/*if(typeof req === 'object') {
|
|
@@ -82,4 +83,4 @@ __decorate([
|
|
|
82
83
|
(0, core_1.Config)('apiOption'),
|
|
83
84
|
__metadata("design:type", Object)
|
|
84
85
|
], BaseService.prototype, "apiOption", void 0);
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jhc2UvYmFzZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGFBQWE7QUFDYix5Q0FBcUQ7QUFPckQseURBQWtEO0FBQ2xELDRDQUErQztBQUUvQyxNQUFhLFdBQVc7SUFFVixHQUFHLENBQWM7SUFHcEIsR0FBRyxDQUFVO0lBR3BCLGlCQUFpQixDQUloQjtJQUNELFVBQVU7SUFFVixTQUFTLENBRVA7SUFFRjs7O09BR0c7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQWtCLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxPQUFPO1FBQzFFLE9BQU8sT0FBTyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBcUIsR0FBbUIsRUFBRSxNQUEyQjtRQUNyRixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBSSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDekQsT0FBTyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQixDQUFnQixHQUFtQixFQUFFLE1BRTNEO1FBQ0csTUFBTSxHQUFHO1lBQ0wsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUc7WUFDbkMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLEVBQUU7WUFDcEMsR0FBRyxNQUFNO1NBQ1UsQ0FBQztRQUV4QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNyQyxJQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQixNQUFNLFNBQVMsR0FBRyxhQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUN4QyxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO1lBRWpEOzs7ZUFHRztRQUNQLENBQUM7UUFDRCxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDOUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDNUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQy9FLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixDQUFDO1lBQzdDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVCLDJCQUEyQjtRQUMzQixNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN6QixhQUFhO1FBQ2IsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFBLHVCQUFhLEVBQXdCLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwRSxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSjtBQXRFRCxrQ0FzRUM7QUFwRWE7SUFEVCxJQUFBLFVBQUcsR0FBRTs7d0NBQ3FCO0FBR3BCO0lBRE4sSUFBQSxhQUFNLEdBQUU7O3dDQUNXO0FBR3BCO0lBREMsSUFBQSxhQUFNLEVBQUMsYUFBYSxDQUFDOztzREFLckI7QUFHRDtJQURDLElBQUEsYUFBTSxFQUFDLFdBQVcsQ0FBQzs7OENBR2xCIn0=
|
|
@@ -99,6 +99,14 @@ exports.default = (appInfo) => {
|
|
|
99
99
|
timeout: Number(process.env.SESSION_TIMEOUT) || 20 * 60 * 1000,
|
|
100
100
|
secretKey: 'fjjiowhb@#$^111)*&',
|
|
101
101
|
},
|
|
102
|
+
// 登陆态校验配置
|
|
103
|
+
auth: {
|
|
104
|
+
// 忽略登陆态校验
|
|
105
|
+
ignores: [
|
|
106
|
+
/\/api\/test\//i,
|
|
107
|
+
"/api/test/action"
|
|
108
|
+
]
|
|
109
|
+
},
|
|
102
110
|
// 登陆相关配置
|
|
103
111
|
sso: {
|
|
104
112
|
baseUrl: process.env.SSO_URL || '',
|
|
@@ -142,4 +150,4 @@ exports.default = (appInfo) => {
|
|
|
142
150
|
};
|
|
143
151
|
return config;
|
|
144
152
|
};
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsNkJBQTZCO0FBQzdCLGtCQUFlLENBQUMsT0FBc0IsRUFBRSxFQUFFO0lBQ3RDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQztJQUMvQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pELE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRXpELE1BQU0sTUFBTSxHQUFHO1FBQ1gsdUVBQXVFO1FBQ3ZFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxHQUFHLHFCQUFxQjtRQUMxQyxPQUFPLEVBQUU7WUFDTCx3QkFBd0I7WUFDeEIsTUFBTSxFQUFFLEVBQUUsRUFBRSxtQ0FBbUM7WUFDL0MsTUFBTTtTQUNUO1FBQ0QsSUFBSSxFQUFFO1lBQ0YsVUFBVTtZQUNWLGlCQUFpQixFQUFFLFVBQVU7WUFDN0Isb0RBQW9EO1lBQ3BELE9BQU8sRUFBRTtnQkFDTCxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQzthQUMvQztZQUNELE9BQU8sRUFBRTtnQkFDTCxPQUFPLEVBQUUsVUFBVTthQUN0QjtTQUNKO1FB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
|
package/dist/guard/auth.d.ts
CHANGED
|
@@ -7,7 +7,12 @@ import { SessionService } from '../service/session.service';
|
|
|
7
7
|
export declare class AuthGuard implements IGuard<Context> {
|
|
8
8
|
sessionService: SessionService;
|
|
9
9
|
ssoOption: any;
|
|
10
|
+
authOption: {
|
|
11
|
+
ignores?: string | Array<RegExp | string>;
|
|
12
|
+
};
|
|
13
|
+
apiOption: any;
|
|
10
14
|
koa: any;
|
|
15
|
+
checkNeedAuth(context: Context, supplierClz: any, methodName: string): any;
|
|
11
16
|
canActivate(context: Context, supplierClz: any, methodName: string): Promise<boolean>;
|
|
12
17
|
checkAuth(context: Context, token: string, needAuth?: boolean): Promise<boolean>;
|
|
13
18
|
authError(context: Context, error?: any): void;
|
package/dist/guard/auth.js
CHANGED
|
@@ -15,18 +15,44 @@ const core_1 = require("@midwayjs/core");
|
|
|
15
15
|
const session_service_1 = require("../service/session.service");
|
|
16
16
|
const decorator_1 = require("../lib/decorator");
|
|
17
17
|
const utils_1 = require("../lib/utils");
|
|
18
|
-
// 校验api路径规则的
|
|
19
|
-
const apiReg = /^\/([^/]+\/)?api\//i;
|
|
20
18
|
/**
|
|
21
19
|
* 校验请求的登陆态
|
|
22
20
|
*/
|
|
23
21
|
let AuthGuard = class AuthGuard {
|
|
24
22
|
sessionService;
|
|
25
23
|
ssoOption;
|
|
24
|
+
authOption;
|
|
25
|
+
apiOption;
|
|
26
26
|
koa;
|
|
27
|
-
|
|
27
|
+
// 检查是否需要验证登陆态
|
|
28
|
+
checkNeedAuth(context, supplierClz, methodName) {
|
|
29
|
+
// 如果有配置忽略验证,则直接返回false
|
|
30
|
+
if (this.authOption?.ignores) {
|
|
31
|
+
if (this.authOption.ignores === '*' || this.authOption.ignores === context.path) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
if (Array.isArray(this.authOption.ignores)) {
|
|
35
|
+
if (this.authOption.ignores.includes('*'))
|
|
36
|
+
return false;
|
|
37
|
+
for (const t of this.authOption.ignores) {
|
|
38
|
+
if (t instanceof RegExp) {
|
|
39
|
+
if (t.test(context.path))
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
else if (typeof t === 'string') {
|
|
43
|
+
if (t === context.path)
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
28
49
|
// 获取是否需要检查登陆态
|
|
29
50
|
const needAuth = (0, decorator_1.getCheckLogin)(supplierClz, methodName);
|
|
51
|
+
return needAuth;
|
|
52
|
+
}
|
|
53
|
+
async canActivate(context, supplierClz, methodName) {
|
|
54
|
+
// 获取是否需要检查登陆态
|
|
55
|
+
const needAuth = this.checkNeedAuth(context, supplierClz, methodName);
|
|
30
56
|
const token = (0, utils_1.getAuthToken)(context);
|
|
31
57
|
if (token)
|
|
32
58
|
context.auth_token = token;
|
|
@@ -106,7 +132,8 @@ let AuthGuard = class AuthGuard {
|
|
|
106
132
|
}
|
|
107
133
|
// 异常处理
|
|
108
134
|
authError(context, error) {
|
|
109
|
-
|
|
135
|
+
const isApi = this.apiOption?.reg?.test(context.path);
|
|
136
|
+
if (isApi) {
|
|
110
137
|
context.status = 200;
|
|
111
138
|
context.res.write('', 'utf8');
|
|
112
139
|
throw error;
|
|
@@ -139,6 +166,14 @@ __decorate([
|
|
|
139
166
|
(0, core_1.Config)('sso'),
|
|
140
167
|
__metadata("design:type", Object)
|
|
141
168
|
], AuthGuard.prototype, "ssoOption", void 0);
|
|
169
|
+
__decorate([
|
|
170
|
+
(0, core_1.Config)('auth'),
|
|
171
|
+
__metadata("design:type", Object)
|
|
172
|
+
], AuthGuard.prototype, "authOption", void 0);
|
|
173
|
+
__decorate([
|
|
174
|
+
(0, core_1.Config)('apiOption'),
|
|
175
|
+
__metadata("design:type", Object)
|
|
176
|
+
], AuthGuard.prototype, "apiOption", void 0);
|
|
142
177
|
__decorate([
|
|
143
178
|
(0, core_1.Config)('koa'),
|
|
144
179
|
__metadata("design:type", Object)
|
|
@@ -146,4 +181,4 @@ __decorate([
|
|
|
146
181
|
exports.AuthGuard = AuthGuard = __decorate([
|
|
147
182
|
(0, core_1.Guard)()
|
|
148
183
|
], AuthGuard);
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ndWFyZC9hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGFBQWE7QUFDYix5Q0FBK0Q7QUFFL0QsZ0VBQTREO0FBQzVELGdEQUFpRDtBQUNqRCx3Q0FBcUU7QUFFckU7O0dBRUc7QUFFSSxJQUFNLFNBQVMsR0FBZixNQUFNLFNBQVM7SUFFbEIsY0FBYyxDQUFpQjtJQUcvQixTQUFTLENBQU07SUFHZixVQUFVLENBRVI7SUFHRixTQUFTLENBQU07SUFHZixHQUFHLENBQU07SUFFVCxjQUFjO0lBQ2QsYUFBYSxDQUFDLE9BQWdCLEVBQzFCLFdBQWdCLEVBQ2hCLFVBQWtCO1FBQ2QsdUJBQXVCO1FBQzNCLElBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMxQixJQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzdFLE9BQU8sS0FBSyxDQUFDO1lBQ2pCLENBQUM7WUFDRCxJQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxJQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7b0JBQUUsT0FBTyxLQUFLLENBQUM7Z0JBRXZELEtBQUksTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDckMsSUFBRyxDQUFDLFlBQVksTUFBTSxFQUFFLENBQUM7d0JBQ3JCLElBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDOzRCQUFFLE9BQU8sS0FBSyxDQUFDO29CQUMxQyxDQUFDO3lCQUNJLElBQUcs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
|