@liujitcn/kratos-admin-core 0.0.37 → 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.
Files changed (35) hide show
  1. package/README.md +2 -0
  2. package/dist/package/declarations/src/locales/generated.d.ts +12 -0
  3. package/dist/package/declarations/src/rpc/base/v1/language.d.ts +1 -1
  4. package/dist/package/declarations/src/rpc/base/v1/login.d.ts +2 -0
  5. package/dist/package/declarations/src/rpc/base/v1/mfa.d.ts +2 -0
  6. package/dist/package/declarations/src/rpc/base/v1/oauth.d.ts +4 -0
  7. package/dist/package/declarations/src/rpc/base/v1/oauth_client.d.ts +1 -1
  8. package/dist/package/declarations/src/rpc/system/admin/v1/base_i18n.d.ts +1 -1
  9. package/dist/package/src/layouts/index.vue +0 -6
  10. package/dist/package/src/layouts/indexAsync.vue +0 -6
  11. package/dist/package/src/locales/en-US.json +4 -1
  12. package/dist/package/src/locales/ja-JP.json +4 -1
  13. package/dist/package/src/locales/zh-CN.json +4 -1
  14. package/dist/package/src/locales/zh-TW.json +4 -1
  15. package/dist/package/src/rpc/base/v1/config.ts +1 -1
  16. package/dist/package/src/rpc/base/v1/file.ts +1 -1
  17. package/dist/package/src/rpc/base/v1/language.ts +2 -2
  18. package/dist/package/src/rpc/base/v1/login.ts +3 -1
  19. package/dist/package/src/rpc/base/v1/mfa.ts +3 -1
  20. package/dist/package/src/rpc/base/v1/oauth.ts +5 -1
  21. package/dist/package/src/rpc/base/v1/oauth_client.ts +2 -2
  22. package/dist/package/src/rpc/common/v1/common.ts +1 -1
  23. package/dist/package/src/rpc/common/v1/enum.ts +1 -1
  24. package/dist/package/src/rpc/common/v1/types.ts +1 -1
  25. package/dist/package/src/rpc/google/protobuf/empty.ts +1 -1
  26. package/dist/package/src/rpc/google/protobuf/wrappers.ts +1 -1
  27. package/dist/package/src/rpc/system/admin/v1/auth.ts +1 -1
  28. package/dist/package/src/rpc/system/admin/v1/base_dict.ts +1 -1
  29. package/dist/package/src/rpc/system/admin/v1/base_i18n.ts +2 -2
  30. package/dist/package/src/rpc/system/admin/v1/base_tenant.ts +1 -1
  31. package/dist/package/src/rpc/system/admin/v1/common.ts +1 -1
  32. package/dist/package/src/rpc/system/common/v1/common.ts +1 -1
  33. package/dist/package/src/views/login/components/LoginForm.vue +11 -13
  34. package/dist/package/src/views/login/index.scss +24 -2
  35. 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>;
@@ -133,6 +133,8 @@ export interface LoginResponse {
133
133
  mfa_method: string;
134
134
  /** WebAuthn认证选项JSON */
135
135
  mfa_webauthn_options_json: string;
136
+ /** 当前登录策略允许的MFA设备免验证天数 */
137
+ mfa_remember_days: number;
136
138
  }
137
139
  /** Base登录公共服务 */
138
140
  export interface LoginService {
@@ -11,6 +11,8 @@ export interface VerifyMfaRequest {
11
11
  recovery_code: string;
12
12
  /** WebAuthn认证响应JSON */
13
13
  webauthn_response_json: string;
14
+ /** 是否记住当前设备 */
15
+ remember_device: boolean;
14
16
  }
15
17
  /** 登录强制绑定多因素认证请求。 */
16
18
  export interface BeginMfaEnrollmentRequest {
@@ -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>;
@@ -44,9 +44,3 @@ watch(isDark, () => (font.color = isDark.value ? "rgba(255, 255, 255, .15)" : "r
44
44
  immediate: true
45
45
  });
46
46
  </script>
47
-
48
- <style scoped lang="scss">
49
- .layout {
50
- min-width: 600px;
51
- }
52
- </style>
@@ -48,9 +48,3 @@ watch(isDark, () => (font.color = isDark.value ? "rgba(255, 255, 255, .15)" : "r
48
48
  immediate: true
49
49
  });
50
50
  </script>
51
-
52
- <style scoped lang="scss">
53
- .layout {
54
- min-width: 600px;
55
- }
56
- </style>
@@ -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.12.1
3
+ // protoc-gen-ts_proto v2.11.8
4
4
  // protoc unknown
5
5
  // source: base/v1/config.proto
6
6
 
@@ -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.12.1
3
+ // protoc-gen-ts_proto v2.11.8
4
4
  // protoc unknown
5
5
  // source: base/v1/file.proto
6
6
 
@@ -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.12.1
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.12.1
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.12.1
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.12.1
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.12.1
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.12.1
3
+ // protoc-gen-ts_proto v2.11.8
4
4
  // protoc unknown
5
5
  // source: common/v1/common.proto
6
6
 
@@ -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.12.1
3
+ // protoc-gen-ts_proto v2.11.8
4
4
  // protoc unknown
5
5
  // source: common/v1/enum.proto
6
6
 
@@ -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.12.1
3
+ // protoc-gen-ts_proto v2.11.8
4
4
  // protoc unknown
5
5
  // source: common/v1/types.proto
6
6
 
@@ -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.12.1
3
+ // protoc-gen-ts_proto v2.11.8
4
4
  // protoc unknown
5
5
  // source: google/protobuf/empty.proto
6
6
 
@@ -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.12.1
3
+ // protoc-gen-ts_proto v2.11.8
4
4
  // protoc unknown
5
5
  // source: google/protobuf/wrappers.proto
6
6
 
@@ -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.12.1
3
+ // protoc-gen-ts_proto v2.11.8
4
4
  // protoc unknown
5
5
  // source: system/admin/v1/auth.proto
6
6
 
@@ -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.12.1
3
+ // protoc-gen-ts_proto v2.11.8
4
4
  // protoc unknown
5
5
  // source: system/admin/v1/base_dict.proto
6
6
 
@@ -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.12.1
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>;
@@ -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.12.1
3
+ // protoc-gen-ts_proto v2.11.8
4
4
  // protoc unknown
5
5
  // source: system/admin/v1/base_tenant.proto
6
6
 
@@ -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.12.1
3
+ // protoc-gen-ts_proto v2.11.8
4
4
  // protoc unknown
5
5
  // source: system/admin/v1/common.proto
6
6
 
@@ -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.12.1
3
+ // protoc-gen-ts_proto v2.11.8
4
4
  // protoc unknown
5
5
  // source: system/common/v1/common.proto
6
6
 
@@ -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: 185px;
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: 97% !important;
122
+ width: 100% !important;
101
123
  padding: 40px 24px 32px !important;
102
124
  .login-logo {
103
125
  margin-bottom: 32px !important;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@liujitcn/kratos-admin-core",
3
3
  "private": false,
4
- "version": "0.0.37",
4
+ "version": "0.0.39",
5
5
  "type": "module",
6
6
  "description": "kratos-admin frontend runtime and base modules",
7
7
  "author": {