@liujitcn/kratos-admin-core 0.0.38 → 0.0.39
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.
- package/README.md +2 -0
- package/dist/package/declarations/src/locales/generated.d.ts +12 -0
- package/dist/package/declarations/src/rpc/base/v1/language.d.ts +1 -1
- package/dist/package/declarations/src/rpc/base/v1/login.d.ts +2 -0
- package/dist/package/declarations/src/rpc/base/v1/mfa.d.ts +2 -0
- package/dist/package/declarations/src/rpc/base/v1/oauth.d.ts +4 -0
- package/dist/package/declarations/src/rpc/base/v1/oauth_client.d.ts +1 -1
- package/dist/package/declarations/src/rpc/system/admin/v1/base_i18n.d.ts +1 -1
- package/dist/package/src/layouts/index.vue +0 -6
- package/dist/package/src/layouts/indexAsync.vue +0 -6
- package/dist/package/src/locales/en-US.json +4 -1
- package/dist/package/src/locales/ja-JP.json +4 -1
- package/dist/package/src/locales/zh-CN.json +4 -1
- package/dist/package/src/locales/zh-TW.json +4 -1
- package/dist/package/src/rpc/base/v1/config.ts +1 -1
- package/dist/package/src/rpc/base/v1/file.ts +1 -1
- package/dist/package/src/rpc/base/v1/language.ts +2 -2
- package/dist/package/src/rpc/base/v1/login.ts +3 -1
- package/dist/package/src/rpc/base/v1/mfa.ts +3 -1
- package/dist/package/src/rpc/base/v1/oauth.ts +5 -1
- package/dist/package/src/rpc/base/v1/oauth_client.ts +2 -2
- package/dist/package/src/rpc/common/v1/common.ts +1 -1
- package/dist/package/src/rpc/common/v1/enum.ts +1 -1
- package/dist/package/src/rpc/common/v1/types.ts +1 -1
- package/dist/package/src/rpc/google/protobuf/empty.ts +1 -1
- package/dist/package/src/rpc/google/protobuf/wrappers.ts +1 -1
- package/dist/package/src/rpc/system/admin/v1/auth.ts +1 -1
- package/dist/package/src/rpc/system/admin/v1/base_dict.ts +1 -1
- package/dist/package/src/rpc/system/admin/v1/base_i18n.ts +2 -2
- package/dist/package/src/rpc/system/admin/v1/base_tenant.ts +1 -1
- package/dist/package/src/rpc/system/admin/v1/common.ts +1 -1
- package/dist/package/src/rpc/system/common/v1/common.ts +1 -1
- package/dist/package/src/views/login/components/LoginForm.vue +11 -13
- package/dist/package/src/views/login/index.scss +24 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# @liujitcn/kratos-admin-core
|
|
2
2
|
|
|
3
|
+
账号密码、OAuth 票据兑换和微信登录统一返回 `mfa_remember_days`,表示当前登录策略允许的 MFA 设备免验证天数;为 `0` 时不提供记住设备选项。
|
|
4
|
+
|
|
3
5
|
kratos-admin 前端底座包。它不包含具体业务模块,提供登录、MFA 校验、菜单、用户信息、应用启动、动态路由、布局、运行状态、公共组件和静态状态页;MFA 绑定面板与恢复码弹窗由登录页和 System 模块共用。宿主可以只安装 core;个人中心、AI 助手和系统管理能力必须由 System 模块提供。
|
|
4
6
|
|
|
5
7
|
浏览器认证使用 Cookie-only 刷新令牌与内存访问令牌。Core 不持久化任何访问令牌或刷新令牌,刷新请求统一携带 `X-Refresh-Token-Transport: cookie` 并启用凭据 Cookie。
|
|
@@ -181,6 +181,7 @@ export declare const LOCALE_MESSAGES: {
|
|
|
181
181
|
"core.login.welcome": string;
|
|
182
182
|
"core.login.mfa_title": string;
|
|
183
183
|
"core.login.mfa_code": string;
|
|
184
|
+
"core.login.mfa_remember_device": string;
|
|
184
185
|
"core.login.mfa_recovery_code": string;
|
|
185
186
|
"core.login.mfa_setup_title": string;
|
|
186
187
|
"core.login.mfa_setup_qr_alt": string;
|
|
@@ -337,6 +338,8 @@ export declare const LOCALE_MESSAGES: {
|
|
|
337
338
|
"common.resource.default": string;
|
|
338
339
|
"common.action.delete_resource": string;
|
|
339
340
|
"common.action.set_field_status": string;
|
|
341
|
+
"core.home.demo_scope": string;
|
|
342
|
+
"core.home.main_title": string;
|
|
340
343
|
};
|
|
341
344
|
readonly "en-US": {
|
|
342
345
|
"common.action.back": string;
|
|
@@ -514,6 +517,7 @@ export declare const LOCALE_MESSAGES: {
|
|
|
514
517
|
"core.login.tenant_code": string;
|
|
515
518
|
"core.login.user_name": string;
|
|
516
519
|
"core.login.welcome": string;
|
|
520
|
+
"core.login.mfa_remember_device": string;
|
|
517
521
|
"core.login.mfa_title": string;
|
|
518
522
|
"core.login.mfa_code": string;
|
|
519
523
|
"core.login.mfa_recovery_code": string;
|
|
@@ -672,6 +676,8 @@ export declare const LOCALE_MESSAGES: {
|
|
|
672
676
|
"common.resource.default": string;
|
|
673
677
|
"common.action.delete_resource": string;
|
|
674
678
|
"common.action.set_field_status": string;
|
|
679
|
+
"core.home.demo_scope": string;
|
|
680
|
+
"core.home.main_title": string;
|
|
675
681
|
};
|
|
676
682
|
readonly "ja-JP": {
|
|
677
683
|
"common.action.back": string;
|
|
@@ -730,6 +736,7 @@ export declare const LOCALE_MESSAGES: {
|
|
|
730
736
|
"core.layout.avatar": string;
|
|
731
737
|
"core.layout.logo_alt": string;
|
|
732
738
|
"core.login.background_alt": string;
|
|
739
|
+
"core.login.mfa_remember_device": string;
|
|
733
740
|
"core.login.mfa_title": string;
|
|
734
741
|
"core.login.mfa_code": string;
|
|
735
742
|
"core.login.mfa_recovery_code": string;
|
|
@@ -1007,6 +1014,8 @@ export declare const LOCALE_MESSAGES: {
|
|
|
1007
1014
|
"common.resource.default": string;
|
|
1008
1015
|
"common.action.delete_resource": string;
|
|
1009
1016
|
"common.action.set_field_status": string;
|
|
1017
|
+
"core.home.demo_scope": string;
|
|
1018
|
+
"core.home.main_title": string;
|
|
1010
1019
|
};
|
|
1011
1020
|
readonly "zh-TW": {
|
|
1012
1021
|
"common.action.back": string;
|
|
@@ -1065,6 +1074,7 @@ export declare const LOCALE_MESSAGES: {
|
|
|
1065
1074
|
"core.layout.avatar": string;
|
|
1066
1075
|
"core.layout.logo_alt": string;
|
|
1067
1076
|
"core.login.background_alt": string;
|
|
1077
|
+
"core.login.mfa_remember_device": string;
|
|
1068
1078
|
"core.login.mfa_title": string;
|
|
1069
1079
|
"core.login.mfa_code": string;
|
|
1070
1080
|
"core.login.mfa_recovery_code": string;
|
|
@@ -1342,6 +1352,8 @@ export declare const LOCALE_MESSAGES: {
|
|
|
1342
1352
|
"common.resource.default": string;
|
|
1343
1353
|
"common.action.delete_resource": string;
|
|
1344
1354
|
"common.action.set_field_status": string;
|
|
1355
|
+
"core.home.demo_scope": string;
|
|
1356
|
+
"core.home.main_title": string;
|
|
1345
1357
|
};
|
|
1346
1358
|
};
|
|
1347
1359
|
export type GeneratedLocale = keyof typeof LOCALE_MESSAGES;
|
|
@@ -13,7 +13,7 @@ export interface OptionLanguageResponse {
|
|
|
13
13
|
/** 当前支持的语言列表 */
|
|
14
14
|
languages: LanguageItem[];
|
|
15
15
|
}
|
|
16
|
-
/** 语言公共服务。 */
|
|
16
|
+
/** Base语言公共服务。 */
|
|
17
17
|
export interface LanguageService {
|
|
18
18
|
/** 查询当前支持的语言选项。 */
|
|
19
19
|
OptionLanguage(request: OptionLanguageRequest): Promise<OptionLanguageResponse>;
|
|
@@ -89,6 +89,8 @@ export interface CreateOauthSessionResponse {
|
|
|
89
89
|
mfa_method: string;
|
|
90
90
|
/** WebAuthn认证选项JSON */
|
|
91
91
|
mfa_webauthn_options_json: string;
|
|
92
|
+
/** 当前登录策略允许的MFA设备免验证天数 */
|
|
93
|
+
mfa_remember_days: number;
|
|
92
94
|
}
|
|
93
95
|
/** 三方登录回调请求 */
|
|
94
96
|
export interface HandleOauthCallbackRequest {
|
|
@@ -133,6 +135,8 @@ export interface ExchangeOauthTicketResponse {
|
|
|
133
135
|
mfa_method: string;
|
|
134
136
|
/** WebAuthn认证选项JSON */
|
|
135
137
|
mfa_webauthn_options_json: string;
|
|
138
|
+
/** 当前登录策略允许的MFA设备免验证天数 */
|
|
139
|
+
mfa_remember_days: number;
|
|
136
140
|
}
|
|
137
141
|
/** 个人中心三方账号绑定回调请求 */
|
|
138
142
|
export interface HandleOauthBindingCallbackRequest {
|
|
@@ -16,7 +16,7 @@ export interface IssueOauthClientTokenResponse {
|
|
|
16
16
|
/** 令牌有效时间,单位为秒 */
|
|
17
17
|
expires_in: number;
|
|
18
18
|
}
|
|
19
|
-
/** 开放授权客户端令牌服务。 */
|
|
19
|
+
/** Base开放授权客户端令牌服务。 */
|
|
20
20
|
export interface OauthClientService {
|
|
21
21
|
/** 使用客户端凭据换取访问令牌。 */
|
|
22
22
|
IssueOauthClientToken(request: IssueOauthClientTokenRequest): Promise<IssueOauthClientTokenResponse>;
|
|
@@ -70,7 +70,7 @@ export interface CodeGenLocaleConfig {
|
|
|
70
70
|
/** 左树描述 */
|
|
71
71
|
left_tree_comment: string;
|
|
72
72
|
}
|
|
73
|
-
/** 国际化翻译信息服务。 */
|
|
73
|
+
/** Admin国际化翻译信息服务。 */
|
|
74
74
|
export interface BaseI18nService {
|
|
75
75
|
/** 翻译单个文本。 */
|
|
76
76
|
DraftBaseI18n(request: DraftBaseI18nRequest): Promise<DraftBaseI18nResponse>;
|
|
@@ -174,6 +174,7 @@
|
|
|
174
174
|
"core.login.tenant_code": "Enter tenant code",
|
|
175
175
|
"core.login.user_name": "Enter username",
|
|
176
176
|
"core.login.welcome": "Welcome to the admin console",
|
|
177
|
+
"core.login.mfa_remember_device": "Skip verification on this device for {days} days",
|
|
177
178
|
"core.login.mfa_title": "Multi-factor authentication",
|
|
178
179
|
"core.login.mfa_code": "Enter the authenticator code",
|
|
179
180
|
"core.login.mfa_recovery_code": "Recovery code (optional)",
|
|
@@ -331,5 +332,7 @@
|
|
|
331
332
|
"common.value.top_level": "Top level",
|
|
332
333
|
"common.resource.default": "{resource}",
|
|
333
334
|
"common.action.delete_resource": "Delete {resource}",
|
|
334
|
-
"common.action.set_field_status": "Set {field}"
|
|
335
|
+
"common.action.set_field_status": "Set {field}",
|
|
336
|
+
"core.home.demo_scope": "Overview",
|
|
337
|
+
"core.home.main_title": "Admin Application"
|
|
335
338
|
}
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
"core.layout.avatar": "ユーザーアバター",
|
|
56
56
|
"core.layout.logo_alt": "システムロゴ",
|
|
57
57
|
"core.login.background_alt": "ログイン画面の背景",
|
|
58
|
+
"core.login.mfa_remember_device": "この端末では{days}日間、追加認証を省略する",
|
|
58
59
|
"core.login.mfa_title": "多要素認証",
|
|
59
60
|
"core.login.mfa_code": "認証コードを入力",
|
|
60
61
|
"core.login.mfa_recovery_code": "リカバリーコード(任意)",
|
|
@@ -331,5 +332,7 @@
|
|
|
331
332
|
"common.value.top_level": "トップレベル",
|
|
332
333
|
"common.resource.default": "{resource}",
|
|
333
334
|
"common.action.delete_resource": "{resource}を削除",
|
|
334
|
-
"common.action.set_field_status": "{field}を設定"
|
|
335
|
+
"common.action.set_field_status": "{field}を設定",
|
|
336
|
+
"core.home.demo_scope": "機能概要",
|
|
337
|
+
"core.home.main_title": "管理アプリケーション"
|
|
335
338
|
}
|
|
@@ -176,6 +176,7 @@
|
|
|
176
176
|
"core.login.welcome": "欢迎登录管理后台",
|
|
177
177
|
"core.login.mfa_title": "多因素认证",
|
|
178
178
|
"core.login.mfa_code": "请输入动态口令",
|
|
179
|
+
"core.login.mfa_remember_device": "{days}天内免验证此设备",
|
|
179
180
|
"core.login.mfa_recovery_code": "恢复码(可选)",
|
|
180
181
|
"core.login.mfa_setup_title": "绑定多因素认证",
|
|
181
182
|
"core.login.mfa_setup_qr_alt": "多因素认证绑定二维码",
|
|
@@ -331,5 +332,7 @@
|
|
|
331
332
|
"common.value.top_level": "顶级节点",
|
|
332
333
|
"common.resource.default": "{resource}",
|
|
333
334
|
"common.action.delete_resource": "删除{resource}",
|
|
334
|
-
"common.action.set_field_status": "设置{field}"
|
|
335
|
+
"common.action.set_field_status": "设置{field}",
|
|
336
|
+
"core.home.demo_scope": "功能概览",
|
|
337
|
+
"core.home.main_title": "管理应用"
|
|
335
338
|
}
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
"core.layout.avatar": "使用者頭像",
|
|
56
56
|
"core.layout.logo_alt": "系統標誌",
|
|
57
57
|
"core.login.background_alt": "登入頁背景",
|
|
58
|
+
"core.login.mfa_remember_device": "{days}天內免驗證此裝置",
|
|
58
59
|
"core.login.mfa_title": "多因素認證",
|
|
59
60
|
"core.login.mfa_code": "請輸入動態密碼",
|
|
60
61
|
"core.login.mfa_recovery_code": "恢復碼(可選)",
|
|
@@ -331,5 +332,7 @@
|
|
|
331
332
|
"common.value.top_level": "頂級節點",
|
|
332
333
|
"common.resource.default": "{resource}",
|
|
333
334
|
"common.action.delete_resource": "刪除{resource}",
|
|
334
|
-
"common.action.set_field_status": "設定{field}"
|
|
335
|
+
"common.action.set_field_status": "設定{field}",
|
|
336
|
+
"core.home.demo_scope": "功能概覽",
|
|
337
|
+
"core.home.main_title": "管理應用程式"
|
|
335
338
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
|
2
2
|
// versions:
|
|
3
|
-
// protoc-gen-ts_proto v2.
|
|
3
|
+
// protoc-gen-ts_proto v2.11.8
|
|
4
4
|
// protoc unknown
|
|
5
5
|
// source: base/v1/language.proto
|
|
6
6
|
|
|
@@ -24,7 +24,7 @@ export interface OptionLanguageResponse {
|
|
|
24
24
|
languages: LanguageItem[];
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
/** 语言公共服务。 */
|
|
27
|
+
/** Base语言公共服务。 */
|
|
28
28
|
export interface LanguageService {
|
|
29
29
|
/** 查询当前支持的语言选项。 */
|
|
30
30
|
OptionLanguage(request: OptionLanguageRequest): Promise<OptionLanguageResponse>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
|
2
2
|
// versions:
|
|
3
|
-
// protoc-gen-ts_proto v2.
|
|
3
|
+
// protoc-gen-ts_proto v2.11.8
|
|
4
4
|
// protoc unknown
|
|
5
5
|
// source: base/v1/login.proto
|
|
6
6
|
|
|
@@ -155,6 +155,8 @@ export interface LoginResponse {
|
|
|
155
155
|
mfa_method: string;
|
|
156
156
|
/** WebAuthn认证选项JSON */
|
|
157
157
|
mfa_webauthn_options_json: string;
|
|
158
|
+
/** 当前登录策略允许的MFA设备免验证天数 */
|
|
159
|
+
mfa_remember_days: number;
|
|
158
160
|
}
|
|
159
161
|
|
|
160
162
|
/** Base登录公共服务 */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
|
2
2
|
// versions:
|
|
3
|
-
// protoc-gen-ts_proto v2.
|
|
3
|
+
// protoc-gen-ts_proto v2.11.8
|
|
4
4
|
// protoc unknown
|
|
5
5
|
// source: base/v1/mfa.proto
|
|
6
6
|
|
|
@@ -19,6 +19,8 @@ export interface VerifyMfaRequest {
|
|
|
19
19
|
recovery_code: string;
|
|
20
20
|
/** WebAuthn认证响应JSON */
|
|
21
21
|
webauthn_response_json: string;
|
|
22
|
+
/** 是否记住当前设备 */
|
|
23
|
+
remember_device: boolean;
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
/** 登录强制绑定多因素认证请求。 */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
|
2
2
|
// versions:
|
|
3
|
-
// protoc-gen-ts_proto v2.
|
|
3
|
+
// protoc-gen-ts_proto v2.11.8
|
|
4
4
|
// protoc unknown
|
|
5
5
|
// source: base/v1/oauth.proto
|
|
6
6
|
|
|
@@ -109,6 +109,8 @@ export interface CreateOauthSessionResponse {
|
|
|
109
109
|
mfa_method: string;
|
|
110
110
|
/** WebAuthn认证选项JSON */
|
|
111
111
|
mfa_webauthn_options_json: string;
|
|
112
|
+
/** 当前登录策略允许的MFA设备免验证天数 */
|
|
113
|
+
mfa_remember_days: number;
|
|
112
114
|
}
|
|
113
115
|
|
|
114
116
|
/** 三方登录回调请求 */
|
|
@@ -157,6 +159,8 @@ export interface ExchangeOauthTicketResponse {
|
|
|
157
159
|
mfa_method: string;
|
|
158
160
|
/** WebAuthn认证选项JSON */
|
|
159
161
|
mfa_webauthn_options_json: string;
|
|
162
|
+
/** 当前登录策略允许的MFA设备免验证天数 */
|
|
163
|
+
mfa_remember_days: number;
|
|
160
164
|
}
|
|
161
165
|
|
|
162
166
|
/** 个人中心三方账号绑定回调请求 */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
|
2
2
|
// versions:
|
|
3
|
-
// protoc-gen-ts_proto v2.
|
|
3
|
+
// protoc-gen-ts_proto v2.11.8
|
|
4
4
|
// protoc unknown
|
|
5
5
|
// source: base/v1/oauth_client.proto
|
|
6
6
|
|
|
@@ -26,7 +26,7 @@ export interface IssueOauthClientTokenResponse {
|
|
|
26
26
|
expires_in: number;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
/** 开放授权客户端令牌服务。 */
|
|
29
|
+
/** Base开放授权客户端令牌服务。 */
|
|
30
30
|
export interface OauthClientService {
|
|
31
31
|
/** 使用客户端凭据换取访问令牌。 */
|
|
32
32
|
IssueOauthClientToken(request: IssueOauthClientTokenRequest): Promise<IssueOauthClientTokenResponse>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
|
2
2
|
// versions:
|
|
3
|
-
// protoc-gen-ts_proto v2.
|
|
3
|
+
// protoc-gen-ts_proto v2.11.8
|
|
4
4
|
// protoc unknown
|
|
5
5
|
// source: system/admin/v1/base_i18n.proto
|
|
6
6
|
|
|
@@ -85,7 +85,7 @@ export interface CodeGenLocaleConfig {
|
|
|
85
85
|
left_tree_comment: string;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
/** 国际化翻译信息服务。 */
|
|
88
|
+
/** Admin国际化翻译信息服务。 */
|
|
89
89
|
export interface BaseI18nService {
|
|
90
90
|
/** 翻译单个文本。 */
|
|
91
91
|
DraftBaseI18n(request: DraftBaseI18nRequest): Promise<DraftBaseI18nResponse>;
|
|
@@ -63,13 +63,7 @@
|
|
|
63
63
|
<el-icon><CircleClose /></el-icon>
|
|
64
64
|
{{ t("common.action.reset") }}
|
|
65
65
|
</el-button>
|
|
66
|
-
<el-button
|
|
67
|
-
round
|
|
68
|
-
size="large"
|
|
69
|
-
type="primary"
|
|
70
|
-
:loading="loading || oauthTicketLoading"
|
|
71
|
-
@click="handleLogin(loginFormRef)"
|
|
72
|
-
>
|
|
66
|
+
<el-button round size="large" type="primary" :loading="loading || oauthTicketLoading" @click="handleLogin(loginFormRef)">
|
|
73
67
|
<el-icon><UserFilled /></el-icon>
|
|
74
68
|
{{ t("common.action.login") }}
|
|
75
69
|
</el-button>
|
|
@@ -142,6 +136,9 @@
|
|
|
142
136
|
label-width="auto"
|
|
143
137
|
@keyup.enter.prevent="verifyMfaLogin"
|
|
144
138
|
/>
|
|
139
|
+
<el-checkbox v-if="mfaRememberDays > 0" v-model="rememberMfaDevice">
|
|
140
|
+
{{ t("core.login.mfa_remember_device", { days: mfaRememberDays }) }}
|
|
141
|
+
</el-checkbox>
|
|
145
142
|
<template #footer>
|
|
146
143
|
<el-button @click="mfaDialogVisible = false">{{ t("common.action.cancel") }}</el-button>
|
|
147
144
|
<el-button type="primary" :loading="mfaLoading" @click="verifyMfaLogin">
|
|
@@ -169,11 +166,7 @@
|
|
|
169
166
|
</el-button>
|
|
170
167
|
</template>
|
|
171
168
|
</ProDialog>
|
|
172
|
-
<MfaRecoveryCodesDialog
|
|
173
|
-
v-model="recoveryCodesDialogVisible"
|
|
174
|
-
:codes="recoveryCodes"
|
|
175
|
-
@confirm="finishMfaEnrollment"
|
|
176
|
-
/>
|
|
169
|
+
<MfaRecoveryCodesDialog v-model="recoveryCodesDialogVisible" :codes="recoveryCodes" @confirm="finishMfaEnrollment" />
|
|
177
170
|
</template>
|
|
178
171
|
|
|
179
172
|
<script setup lang="ts">
|
|
@@ -242,6 +235,8 @@ const mfaChallengeId = ref("");
|
|
|
242
235
|
const mfaLoginFormRef = ref<ProFormInstance>();
|
|
243
236
|
const mfaLoginForm = reactive({ code: "", recoveryCode: "" });
|
|
244
237
|
const mfaMethod = ref("totp");
|
|
238
|
+
const mfaRememberDays = ref(0);
|
|
239
|
+
const rememberMfaDevice = ref(false);
|
|
245
240
|
const mfaWebAuthnOptionsJson = ref("");
|
|
246
241
|
const mfaSetupDialogVisible = ref(false);
|
|
247
242
|
const mfaSetupTicket = ref("");
|
|
@@ -576,6 +571,8 @@ const handleLoginResponse = async (result: LoginResponse) => {
|
|
|
576
571
|
if (result.status === LoginStatus.LOGIN_STATUS_MFA_REQUIRED) {
|
|
577
572
|
mfaChallengeId.value = result.mfa_challenge_id;
|
|
578
573
|
mfaMethod.value = result.mfa_method || "totp";
|
|
574
|
+
mfaRememberDays.value = result.mfa_remember_days || 0;
|
|
575
|
+
rememberMfaDevice.value = false;
|
|
579
576
|
mfaWebAuthnOptionsJson.value = result.mfa_webauthn_options_json || "";
|
|
580
577
|
mfaLoginForm.code = "";
|
|
581
578
|
mfaLoginForm.recoveryCode = "";
|
|
@@ -612,7 +609,8 @@ const verifyMfaLogin = async () => {
|
|
|
612
609
|
challenge_id: mfaChallengeId.value,
|
|
613
610
|
code: useRecoveryCode ? "" : mfaLoginForm.code,
|
|
614
611
|
recovery_code: mfaLoginForm.recoveryCode,
|
|
615
|
-
webauthn_response_json: webauthnResponseJson
|
|
612
|
+
webauthn_response_json: webauthnResponseJson,
|
|
613
|
+
remember_device: rememberMfaDevice.value
|
|
616
614
|
});
|
|
617
615
|
mfaDialogVisible.value = false;
|
|
618
616
|
await handleLoginResponse(result);
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
.login-container {
|
|
2
|
+
box-sizing: border-box;
|
|
3
|
+
width: 100%;
|
|
4
|
+
max-width: 100%;
|
|
5
|
+
overflow-x: hidden;
|
|
2
6
|
height: 100%;
|
|
3
7
|
min-height: 550px;
|
|
4
8
|
background-color: #eeeeee;
|
|
@@ -9,6 +13,8 @@
|
|
|
9
13
|
position: relative;
|
|
10
14
|
box-sizing: border-box;
|
|
11
15
|
display: flex;
|
|
16
|
+
min-width: 0;
|
|
17
|
+
max-width: calc(100% - 32px);
|
|
12
18
|
align-items: center;
|
|
13
19
|
justify-content: space-around;
|
|
14
20
|
width: 96.5%;
|
|
@@ -28,6 +34,9 @@
|
|
|
28
34
|
right: 72px;
|
|
29
35
|
}
|
|
30
36
|
.login-left {
|
|
37
|
+
min-width: 0;
|
|
38
|
+
max-width: 800px;
|
|
39
|
+
flex: 1 1 800px;
|
|
31
40
|
width: 800px;
|
|
32
41
|
margin-right: 10px;
|
|
33
42
|
.login-left-img {
|
|
@@ -36,7 +45,10 @@
|
|
|
36
45
|
}
|
|
37
46
|
}
|
|
38
47
|
.login-form {
|
|
48
|
+
position: relative;
|
|
39
49
|
box-sizing: border-box;
|
|
50
|
+
min-width: 0;
|
|
51
|
+
flex: 0 1 420px;
|
|
40
52
|
width: 420px;
|
|
41
53
|
max-width: 100%;
|
|
42
54
|
padding: 50px 40px 45px;
|
|
@@ -82,7 +94,8 @@
|
|
|
82
94
|
margin-top: 40px;
|
|
83
95
|
white-space: nowrap;
|
|
84
96
|
.el-button {
|
|
85
|
-
width:
|
|
97
|
+
width: calc(50% - 6px);
|
|
98
|
+
min-width: 0;
|
|
86
99
|
}
|
|
87
100
|
}
|
|
88
101
|
}
|
|
@@ -93,11 +106,20 @@
|
|
|
93
106
|
.login-left {
|
|
94
107
|
display: none;
|
|
95
108
|
}
|
|
109
|
+
|
|
110
|
+
.login-container .login-box {
|
|
111
|
+
justify-content: center;
|
|
112
|
+
}
|
|
96
113
|
}
|
|
97
114
|
|
|
98
115
|
@media screen and (width <= 600px) {
|
|
116
|
+
.login-container .login-box {
|
|
117
|
+
max-width: calc(100% - 16px);
|
|
118
|
+
padding: 0 8px;
|
|
119
|
+
}
|
|
120
|
+
|
|
99
121
|
.login-form {
|
|
100
|
-
width:
|
|
122
|
+
width: 100% !important;
|
|
101
123
|
padding: 40px 24px 32px !important;
|
|
102
124
|
.login-logo {
|
|
103
125
|
margin-bottom: 32px !important;
|