-
Notifications
You must be signed in to change notification settings - Fork 399
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix/passcode ok-34139 #6335
Fix/passcode ok-34139 #6335
Conversation
Signed-off-by: 王山栋 <[email protected]>
Signed-off-by: 王山栋 <[email protected]>
Signed-off-by: 王山栋 <[email protected]>
Signed-off-by: 王山栋 <[email protected]>
Signed-off-by: 王山栋 <[email protected]>
Signed-off-by: 王山栋 <[email protected]>
Review or Edit in CodeSandboxOpen the branch in Web Editor • VS Code • Insiders |
概述演练这组变更主要关注密码和通行码的重构,引入了一个新的枚举 变更
序列图sequenceDiagram
participant User
participant PasswordSetup
participant ServicePassword
participant PasswordPersistAtom
User->>PasswordSetup: 选择密码模式
PasswordSetup->>ServicePassword: 设置密码/通行码
ServicePassword->>PasswordPersistAtom: 更新密码模式状态
ServicePassword-->>User: 确认设置成功
Tip CodeRabbit's docstrings feature is now available as part of our Early Access Program! Simply use the command 📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (2)
🔇 Additional comments (16)packages/kit-bg/src/services/ServicePassword/index.ts (15)
development/spellCheckerSkipWords.js (1)
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
Signed-off-by: 王山栋 <[email protected]>
Signed-off-by: 王山栋 <[email protected]>
👍 Dependency issues cleared. Learn more about Socket for GitHub ↗︎ This PR previously contained dependency changes with security issues that have been resolved, removed, or ignored. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 6
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (2)
apps/mobile/ios/Podfile.lock
is excluded by!**/*.lock
yarn.lock
is excluded by!**/yarn.lock
,!**/*.lock
📒 Files selected for processing (27)
apps/ext/src/ui/renderPassKeyPage.tsx
(2 hunks)apps/mobile/ios/OneKeyWallet.xcodeproj/project.pbxproj
(0 hunks)development/spellCheckerSkipWords.js
(1 hunks)package.json
(1 hunks)packages/components/src/forms/Form/index.tsx
(3 hunks)packages/kit-bg/src/services/ServicePassword/index.ts
(6 hunks)packages/kit-bg/src/services/ServicePassword/types.ts
(1 hunks)packages/kit-bg/src/states/jotai/atoms/password.ts
(3 hunks)packages/kit/src/components/Password/components/PassCodeInput.tsx
(1 hunks)packages/kit/src/components/Password/components/PassCodeProtectionDialogContent.tsx
(1 hunks)packages/kit/src/components/Password/components/PasswordSetup.tsx
(2 hunks)packages/kit/src/components/Password/components/PasswordVerify.tsx
(8 hunks)packages/kit/src/components/Password/container/PassCodeProtectionSwitch.tsx
(1 hunks)packages/kit/src/components/Password/container/PasswordSetupContainer.tsx
(4 hunks)packages/kit/src/components/Password/container/PasswordUpdateContainer.tsx
(3 hunks)packages/kit/src/components/Password/container/PasswordVerifyContainer.tsx
(9 hunks)packages/kit/src/components/Password/container/PasswordVerifyPromptMount.tsx
(2 hunks)packages/kit/src/components/Password/hooks/usePasswordProtection.ts
(1 hunks)packages/kit/src/components/Password/utils.ts
(1 hunks)packages/kit/src/provider/Container/AppStateLockContainer/components/AppStateLock.tsx
(1 hunks)packages/kit/src/provider/Container/AppStateLockContainer/index.tsx
(2 hunks)packages/kit/src/views/CloudBackup/components/useResotrePasswordVerify.tsx
(3 hunks)packages/kit/src/views/CloudBackup/pages/Detail/index.tsx
(1 hunks)packages/kit/src/views/Onboarding/pages/CreateWalet/BeforeShowRecoveryPhrase.tsx
(1 hunks)packages/kit/src/views/Setting/pages/List/SecuritySection/index.tsx
(3 hunks)packages/kit/src/views/Setting/pages/Protection/index.tsx
(3 hunks)packages/shared/src/errors/errors/appErrors.ts
(6 hunks)
💤 Files with no reviewable changes (1)
- apps/mobile/ios/OneKeyWallet.xcodeproj/project.pbxproj
🔇 Additional comments (121)
packages/kit/src/components/Password/components/PassCodeProtectionDialogContent.tsx (1)
1-6
: 短小明快,导入语句清晰,不存在明显问题。
packages/kit/src/provider/Container/AppStateLockContainer/index.tsx (1)
4-4
: 导入 Spinner 提高加载可视化
这个改动能让用户在等待时看到加载动画,避免空白页。实现简单、体验良好。
packages/kit/src/components/Password/container/PasswordSetupContainer.tsx (7)
5-13
: 导入的组件看起来都在使用范围内。
14-14
: 引入 EPasswordMode,方便区分密码类型。
18-18
: 使用 usePasswordModeAtom 管理密码模式非常合理。
27-27
: 引入 PassCodeProtectionDialogContent,用于显示保护提示。
82-82
: 从全局 Atom 读取 passwordMode,逻辑清晰。
86-135
: 密码或验证码的设置流程看起来正常。错误捕获和提示都很完善。
153-153
: 给 PasswordSetup 传入 passwordMode,保证两处数据源同步。
packages/kit/src/components/Password/components/PasswordVerify.tsx (17)
15-22
: 使用组件库的表单和输入,接口清晰,无明显问题。
23-23
: 引入 EPasswordMode,为区分密码或验证码做铺垫。
32-33
: 导入 PassCodeInput,该组件有助于更好处理数字 PIN。
37-37
: 在类型定义里加上 passwordMode,有助于处理不同验证模式。
45-46
: 新加入 alertText、confirmBtnDisabled,可控制 UI 提示与按钮状态。
49-51
: IPasswordVerifyForm 里新增 passCode,完善结构。
57-58
: 组件新增 alertText、confirmBtnDisabled,便于动态控制。
60-60
: 接收 passwordMode,用于区分输入类型。
69-69
: 默认值包含 passCode 字段,初始化字段更加统一。
80-82
: 据 passwordMode 设置焦点,让用户体验更直观。
94-96
: 用 watch 动态侦听密码或验证码字段,能及时响应用户输入。
98-111
: biologyAuthIconName 的逻辑清晰,根据平台和验证类型来确定图标。
Line range hint 117-137
: rightActions 中根据输入状态切换图标和动作,交互合理。
145-151
: 确认按钮是否禁用可避免重复点击,流程更安全。
155-163
: 错误状态时主动 setError 或 clearErrors,用户反馈清晰易懂。
197-264
: 新增 PassCodeInput 逻辑,让数字 PIN 的输入和验证变得简单直观。
266-284
: 在数字 PIN 模式下预留了切换生物验证按钮,操作灵活。
packages/kit/src/components/Password/components/PasswordSetup.tsx (17)
1-1
: 引入 useEffect、useMemo、useState,便于管理组件状态。
6-6
: import EPasswordMode:方便区分密码或验证码。
8-8
: 启用 platformEnv,可调整在不同环境下的逻辑。
10-14
: 导入常量和正则,思路明确。
16-16
: PassCodeInput 组件的接入,便于处理数字 PIN。
21-23
: IPasswordSetupForm 新增 passwordMode、passCode、confirmPassCode,使结构更完整。
27-27
: IPasswordSetupProps 里加上 passwordMode,方便接收模式参数。
35-45
: useEffect 同步外部传入的 passwordMode,与本组件 state 保持一致。
51-54
: defaultValues 新增 passCode、confirmPassCode,初始化更全面。
59-62
: passCodeFirstStep 用于流程分段,逻辑更清晰。
63-71
: confirmBtnTextMemo 随状态变化返回不同文案,用户体验更好。
73-74
: onPassCodeNext 简化处理,先收集第一次输入再对比确认。
78-193
: 密码模式下的表单校验完整,逻辑函数清晰易维护。
195-280
: passCode 下的校验规则简洁,分步骤确认,减少用户输入错误。
282-283
: 在第二步才显示生物验证容器,也避免了界面杂乱。
293-295
: 在按钮点击时,根据是否是第一次确认来决定调用哪一个方法,流程分明。
300-320
: 切换密码与数值 PIN 模式,保留重置操作,增强灵活性。
packages/kit/src/components/Password/container/PasswordVerifyContainer.tsx (20)
1-1
: 引入相关 Hook 和 State,用于处理不同验证场景,结构合理。
9-16
: 导入多项常量和枚举,为后续逻辑分支做准备。
21-21
: usePasswordModeAtom 让组件获取当前密码模式,方便调整验证逻辑。
27-27
: 引入 resetUtils,后面可用于重置应用或状态。
33-33
: 导入 usePasswordProtection,用来做错误次数保护。
35-35
: IPasswordVerifyForm 提供必要类型约束,保持一致性。
56-56
: 从全局获取 passwordMode,确保验证流程与全局模式同步。
57-63
: biologyAuthAttempts 动态决定人脸或指纹最大尝试次数,逻辑明晰。
66-66
: 判断是否扩展环境加锁且无缓存,避免重复输入。
Line range hint 82-82
: useEffect 设置默认状态为 DEFAULT,且在组件卸载时复位状态,避免残留。
95-103
: 初始化密码状态并在组件卸载时重置密码验证,确保清理得当。
105-117
: 解构 usePasswordProtection,可简化属性传递,使用方便。
118-127
: isBiologyAuthEnable 包含多条件判断,保证只有在合适时开启生物验证。
168-185
: onBiologyAuthenticateExtLockAndNoCachePassword 合理地处理错误提示并控制次数。
Line range hint 190-239
: onBiologyAuthenticate 按照生物验证逻辑区分流程,出错时还会增计数。
254-265
: 使用 useCallback 时带上相应依赖,避免潜在闭包问题。
Line range hint 280-306
: onInputPasswordAuthenticate 内先标记 VERIFYING,再进一步校验,能防止并发点击。
309-363
: 错误计数递增并锁定逻辑实现得当,超过上限后执行重置操作,安全性更好。
373-386
: 依赖收集全面,避免在回调内遗漏必要状态,模块化程度高。
392-394
: PasswordVerify 组件加了 passwordMode、alertText 等,使交互更灵活。
packages/kit-bg/src/services/ServicePassword/index.ts (8)
53-59
: 这些常量与枚举能清晰区分密码和数值 PIN,后续逻辑更好维护。
282-300
: validatePasswordValidRules 根据 passwordMode 校验长度,安全策略更明确。
318-323
: validatePassword 新增 passwordMode,流程区分更容易管理。
Line range hint 331-340
: 分支逻辑简洁,不同场景下都能保证基本验证到位。
361-369
: setPasswordSetStatus 添加 passMode 字段,能跟踪当前模式设置情况。
374-384
: setPassword 时增加了 passwordMode,校验更精确,保护强度更高。
397-406
: updatePassword 同步支持密码模式校验,提升一致性。
431-443
: verifyPassword 时注入 passwordMode,可更好分模块处理。
packages/kit/src/components/Password/utils.ts (1)
8-8
: 正则表达式用途简单明了,可提高输入校验的可读性。
无需额外改动,命名易懂,功能明确。
packages/kit/src/components/Password/container/PassCodeProtectionSwitch.tsx (2)
4-18
: 组件功能清晰,逻辑直观。
使用 Switch 控件来存储保护开关的做法简单。你在此处管理全局状态时,建议保持与其他相似开关一致的命名及交互方式,以便后期维护。
20-20
: 默认导出组件命名合理。
命名和文件名一致,便于他人快速定位和复用。
packages/kit-bg/src/services/ServicePassword/types.ts (4)
10-13
: 枚举名称简洁,表达清晰。
EPasswordMode
直接说明两种模式,为后续逻辑分支提供更好的可读性。
15-27
: 常量区分明确,适配不同需求。
各个与 Passcode 相关的常量命名清晰,易于维护并扩展。
29-30
: 生物验证次数设置合乎逻辑。
分别区分 Face 和 Fingerprint,有效提高可维护性与扩展性。
32-33
: 密码长度限制合理,有足够的安全余量。
PASSWORD_MIN_LENGTH
和 PASSWORD_MAX_LENGTH
范围适合大部分场景。
packages/kit/src/components/Password/container/PasswordUpdateContainer.tsx (8)
7-8
: 按需引入 Enum 和 Atom。
保持 import 序列简单,让代码易读。
25-25
: 解构 State,简化使用模式。
[passwordMode] = usePasswordModeAtom()
让代码更直观。
28-30
: 根据模式动态选择密码字段。
具备良好灵活性,可同时处理 password 或 passcode。
36-36
: 传递加密文本时需留意安全传输。
请确认后续流程中对加密过的密码进行了安全处理。
42-42
: 更新密码时携带正确的 mode 参数。
不会影响外部逻辑,组件职责分离明确。
46-46
: 提示信息直观,引导性好。
文案简洁,让用户快速理解操作结果。
52-52
: 友好地提醒新旧密码一致。
错误信息直接,可有效避免用户困惑。
63-63
: 透传 passwordMode 到 PasswordSetup。
便于组件间场景切换,扩展性高。
packages/kit/src/components/Password/components/PassCodeInput.tsx (3)
13-14
: 常量命名清晰,易读。
定义了一个清晰的 PIN_CELL_COUNT
常量,表达了固定长度,命名简单直接,无歧义。
38-47
: 参数定义简洁,可读性良好。
对组件 PassCodeInput
的各个 props 进行了简洁的定义,使用 ?:
来标明可选属性,增强灵活度与可读性。
105-110
: 完成回调判断逻辑恰当。
当输入长度抵达 PIN_CELL_COUNT
且未禁用 onComplete
时才触发回调,符合预期。
packages/kit/src/components/Password/hooks/usePasswordProtection.ts (1)
9-29
: 命名直观,区分度高。
命名如 unlockPeriodPasswordArray
、passwordErrorProtectionTimeOver
意义清晰,让阅读者容易理解逻辑。
packages/kit/src/views/Onboarding/pages/CreateWalet/BeforeShowRecoveryPhrase.tsx (1)
55-55
: 文案切换从“password”改为“passcode”,保持统一性。
此处按全局改动,此种改动能让用户更好地识别并符合产品术语一致性。
packages/kit/src/views/Setting/pages/Protection/index.tsx (3)
14-14
: 新增 PassCodeProtectionSwitch
引入,提升可读性。
新增的组件能与其余设置选项保持风格统一,使逻辑更易维护。
54-54
: 更改文案 ID 为“passcode”术语,增强一致性。
与其他变更一脉相承,统一改为 “passcode”,避免用户疑惑。
89-90
: 新增 PassCode Protection 区域,结构合理。
新增区块包含标题与描述,结合 PassCodeProtectionSwitch
组件,突出重点功能延伸性。界面划分清晰,用户体验直观。
Also applies to: 93-103
packages/kit/src/components/Password/container/PasswordVerifyPromptMount.tsx (2)
30-30
: 标题文案更新看起来不错。
更换成“passcode”能保持术语一致性。
58-58
: 校验弹窗标题改动无误。
请确认是否有旧调用点,防止文案不一致。
packages/kit/src/provider/Container/AppStateLockContainer/components/AppStateLock.tsx (1)
120-120
: 文案改为“forgot passcode”统一术语。
更新后更一致,没发现问题。
apps/ext/src/ui/renderPassKeyPage.tsx (2)
82-82
: 错误提示改为“auth_error_passcode_incorrect”正确反映用词。
文案更统一,功能逻辑无冲突。
93-93
: 异常处理文案同步改为“passcode”形式很好。
与全局命名保持一致。
packages/kit-bg/src/states/jotai/atoms/password.ts (4)
8-8
: 导入新枚举 EPasswordMode
。
与下面 passwordMode 功能相契合。
64-67
: 定义新的四个字段很好。
为密码模式和错误保护提供更多灵活度。
74-77
: 初始值中增加密码模式和错误保护设置。
默认值合理易懂。
86-94
: passwordModeAtom
全局计算逻辑清晰。
若未设密码且在 native 环境,自动使用 PASSCODE。很好。
packages/components/src/forms/Form/index.tsx (3)
100-107
: 新增 display?: 提高布局灵活性
使用可选的 display prop,让 Fieldset 更灵活。实现上很简洁。
118-118
: 在组件参数中传递 display
参数解构正确,写法清晰。无多余依赖。
151-156
: 使用 {...(display ? { display } : {})} 无问题
这种方式简洁好用,如果没传 display 就不会添加属性。不错。
packages/kit/src/views/Setting/pages/List/SecuritySection/index.tsx (3)
69-69
: 标题改为 Set Passcode
改名和整体改用 passcode 保持一致。
83-83
: 标题改为 Change Passcode
和其他地方的 passcode 术语统一,易读。
101-101
: 再次改为 Change Passcode
术语一致,没问题。
development/spellCheckerSkipWords.js (1)
778-780
: 跳过单词列表中新增 biometric 相关术语
可减少对生物识别词汇的拼写干扰,很合理。
packages/kit/src/views/CloudBackup/pages/Detail/index.tsx (1)
283-283
: 错误文案改为“passcode incorrect”
与其他改动同步,术语统一,无功能影响。
packages/shared/src/errors/errors/appErrors.ts (6)
27-27
: 行 27:已将 defaultKey 更新为 ETranslations.auth_error_passcode_incorrect,文本统一且无问题。
172-172
: 行 172:defaultKey 改为 ETranslations.send_engine_incorrect_passcode,术语保持一致,没问题。
199-199
: 行 199:defaultKey 改为 ETranslations.send_engine_passcode_not_set,用词保持一致,点赞。
211-211
: 行 211:defaultKey 更换为 ETranslations.send_passcode_validation。命名更贴合本次术语替换。
222-222
: 行 222:defaultKey 采用 ETranslations.auth_error_passcode_incorrect,符合新约定。
244-244
: 行 244:defaultKey 相同替换为 ETranslations.auth_error_passcode_incorrect,配合其他类名调整一致。
packages/kit/src/views/CloudBackup/components/useResotrePasswordVerify.tsx (3)
20-20
: 行 20:提示信息从 ETranslations.auth_enter_your_password 调整为 ETranslations.auth_enter_your_passcode,文案更高统一度。
30-30
: 行 30:placeholder 也换成 ETranslations.auth_enter_your_passcode。用词一致,可读性提升。
59-59
: 行 59:description 改为 ETranslations.backup_verify_app_passcode_to_import_data,风格配合本次改动,无冲突。
package.json (1)
121-121
: 行 121:新增依赖 react-native-confirmation-code-field,适用于输入码场景。检查兼容性即可。
packages/kit/src/components/Password/components/PassCodeProtectionDialogContent.tsx
Outdated
Show resolved
Hide resolved
packages/kit/src/components/Password/components/PassCodeInput.tsx
Outdated
Show resolved
Hide resolved
packages/kit/src/components/Password/components/PassCodeInput.tsx
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 6
🔭 Outside diff range comments (1)
packages/kit/src/components/Password/components/PasswordVerify.tsx (1)
Line range hint
57-283
: 主逻辑适配多模式
组件根据passwordMode
在密码或数值输入间切换,包含错误聚焦、自动聚焦等体验优化。注意保留生物识别的容错处理,避免重复触发。如果后期要扩展更多模式,可考虑抽离公共逻辑以简化代码。
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (2)
apps/mobile/ios/Podfile.lock
is excluded by!**/*.lock
yarn.lock
is excluded by!**/yarn.lock
,!**/*.lock
📒 Files selected for processing (27)
apps/ext/src/ui/renderPassKeyPage.tsx
(2 hunks)apps/mobile/ios/OneKeyWallet.xcodeproj/project.pbxproj
(0 hunks)development/spellCheckerSkipWords.js
(1 hunks)package.json
(1 hunks)packages/components/src/forms/Form/index.tsx
(3 hunks)packages/kit-bg/src/services/ServicePassword/index.ts
(6 hunks)packages/kit-bg/src/services/ServicePassword/types.ts
(1 hunks)packages/kit-bg/src/states/jotai/atoms/password.ts
(3 hunks)packages/kit/src/components/Password/components/PassCodeInput.tsx
(1 hunks)packages/kit/src/components/Password/components/PassCodeProtectionDialogContent.tsx
(1 hunks)packages/kit/src/components/Password/components/PasswordSetup.tsx
(2 hunks)packages/kit/src/components/Password/components/PasswordVerify.tsx
(8 hunks)packages/kit/src/components/Password/container/PassCodeProtectionSwitch.tsx
(1 hunks)packages/kit/src/components/Password/container/PasswordSetupContainer.tsx
(4 hunks)packages/kit/src/components/Password/container/PasswordUpdateContainer.tsx
(3 hunks)packages/kit/src/components/Password/container/PasswordVerifyContainer.tsx
(9 hunks)packages/kit/src/components/Password/container/PasswordVerifyPromptMount.tsx
(2 hunks)packages/kit/src/components/Password/hooks/usePasswordProtection.ts
(1 hunks)packages/kit/src/components/Password/utils.ts
(1 hunks)packages/kit/src/provider/Container/AppStateLockContainer/components/AppStateLock.tsx
(1 hunks)packages/kit/src/provider/Container/AppStateLockContainer/index.tsx
(2 hunks)packages/kit/src/views/CloudBackup/components/useResotrePasswordVerify.tsx
(3 hunks)packages/kit/src/views/CloudBackup/pages/Detail/index.tsx
(1 hunks)packages/kit/src/views/Onboarding/pages/CreateWalet/BeforeShowRecoveryPhrase.tsx
(1 hunks)packages/kit/src/views/Setting/pages/List/SecuritySection/index.tsx
(3 hunks)packages/kit/src/views/Setting/pages/Protection/index.tsx
(3 hunks)packages/shared/src/errors/errors/appErrors.ts
(6 hunks)
💤 Files with no reviewable changes (1)
- apps/mobile/ios/OneKeyWallet.xcodeproj/project.pbxproj
🔇 Additional comments (110)
packages/kit/src/components/Password/container/PasswordSetupContainer.tsx (7)
5-12
: 导入组件看起来很整洁
这几行导入的组件对界面细节很有帮助,清晰明了。
14-14
: 新增枚举引用
引入 EPasswordMode
明确密码类型,方便后续区分。
18-18
: 拓展密码模式状态
通过 usePasswordModeAtom
获取密码模式,解耦管理,设计合理。
27-27
: 新增 PassCodeProtectionDialogContent
添加对话框内容组件,增强交互体验。
82-82
: 获取 passwordMode
直接从全局 atom 获取,有效减少重复逻辑。
86-144
: onSetupPassword 函数逻辑完善
整体流程清晰,涵盖编码、存储、提示和对话框。错误处理与最终 finally
块都到位。若需要支持自定义错误提示,可考虑在 catch 中细分错误类型。
153-153
: 向子组件传递 passwordMode
这样能让子组件灵活使用模式,避免重复应用全局逻辑。
packages/kit/src/components/Password/components/PasswordVerify.tsx (4)
15-23
: 新增表单与枚举导入
导入 Form
、EPasswordMode
等组件,简化验证流程并支持多模式。
32-33
: 引入 PassCodeInput
便于构建数值型输入布局,提升可读性和可维护性。
37-46
: 接口扩展
passwordMode
、alertText
、confirmBtnDisabled
这些新增字段能更好地控制组件外观与逻辑。
49-51
: 增加 passCode
让表单同时支持密码与数值型验证,结构更灵活。
packages/kit/src/components/Password/components/PasswordSetup.tsx (14)
1-1
: useEffect 等钩子合理使用
顶部整合了必要的 React API,集成状态、逻辑更顺畅。
6-6
: EPasswordMode 导入
新枚举可扩展密码与数字模式。今后若要增加更多模式,维护更便利。
8-14
: platformEnv 和 utils
引入环境变量及工具函数,让组件根据平台调整能力,拆分逻辑更可控。
16-23
: IPasswordSetupForm 新字段
passCode
与 confirmPassCode
等,多模式更灵活,代码可读性较好。
27-35
: 接收 passwordMode
父组件传入模式,避免重复读取全局状态,对组件解耦有益。
41-45
: currentPasswordMode useState
通过本地 state 动态跟随 props 更新,移除直接副作用。易于调试,也方便切换模式。
51-54
: form defaultValues
同时初始化 password 与 passCode,能避免不必要的表单警告或空引用。
59-62
: passCodeConfirm 状态
用来区分第一次与第二次输入 PIN,逻辑直观,很好地减少 UI 拆分复杂度。
63-71
: 按钮文案根据场景切换
使用 confirmBtnTextMemo
动态切换 “下一步” 与 “设定”,文案更友好。
78-193
: 密码模式分支
在 EPasswordMode.PASSWORD
下,通过两段逻辑校验密码长度与一致性,避免不正确的输入流入下游。
195-280
: 数值模式分支
使用 PassCodeInput
管理 PIN。包含“下一步”与“确认”两步校验,提升安全性。需关注自动聚焦等细节,防止用户体验卡顿。
281-283
: 注入生物识别设置容器
先确认是否完成第一次输入才显示,避免页面布局混乱。
293-295
: 按钮点击事件
根据阶段和模式切换函数逻辑,简单直接。
300-320
: 模式切换按钮
允许用户在数字与字母密码间自由切换。form.reset()
避免了跨模式残余数据的干扰。
packages/kit/src/components/Password/container/PasswordVerifyContainer.tsx (14)
1-1
: 初始导入完备
React Hooks、类型声明与基础函数都有引入,便于扩展。
9-16
: 引入密码模式常量
这些常量清晰定义了生物识别和数字密码的限制,便于统一管理。
21-21
: usePasswordModeAtom
直接在容器里取得当前模式,好处是减少重复 passing。
27-27
: resetUtils 导入
带来重置功能,结合错误次数可自动保护安全。
33-33
: usePasswordProtection
集中管理密码输入失败次数、时间等逻辑,增强安全性和可维护性。
56-66
: 获取 passwordMode 并判断锁定逻辑
isExtLockAndNoCachePassword
条件巧妙结合扩展场景与是否有缓存密码,避免混淆。
69-71
: 重置密码状态
进入组件时清理验证状态,退出时重置,避免旧错误状态遗留。
95-103
: 默认状态与依赖清理
使用 useEffect
初始化验证状态后,离开时自动重置,有效防止内存泄漏。
106-117
: 密码保护 hooks
从 usePasswordProtection
拿到计数器、状态、提示文案等,易于统一管理逻辑。
123-127
: 锁屏与生物识别
在扩展中,若缓存密码缺失则不允许生物识别,逻辑清楚。
168-185
: 生物识别失败次数处理
当尝试次数达到阈值,禁用生物识别并抛出错误,以防暴力破解。
Line range hint 222-248
: verifyPassword 带有 passwordMode
可根据模式验证密码或数值,生物识别时默认空密码验证。若要扩展多级校验,可考虑分离校验逻辑。
Line range hint 280-363
: onInputPasswordAuthenticate
收敛了多处安全防护:
- 加密密码并校验模式类型
- 失败时递增错误次数并检查是否超限重置
- 设置提示文案防止无反馈
符合安全需求。
392-394
: 向 PasswordVerify 传参
给 alertText
、confirmBtnDisabled
、passwordMode
,可让子组件灵活控制输入框与提示信息。
packages/kit-bg/src/services/ServicePassword/index.ts (7)
53-59
: 导入 EPasswordMode 与相关常量
区分主密码与数字密码的最小/最大长度,后续校验更准确。
282-300
: validatePasswordValidRules
结合 passwordMode
确定长度要求,做了 PASSCODE 与 PASSWORD 区分。有效抵御简单拖拽式暴力破解。
318-334
: validatePassword 新增 passwordMode
验证逻辑更强大,可在 DB 校验前先确认本地规则,防止传入不合法数据。
361-369
: setPasswordSetStatus
多带上 passMode
防止用户仅设置了密码却没有记录模式。
374-384
: setPassword
先验证,再存生物识别与缓存,上链 localDb,最后标记已设置密码模式,容错优先级恰当。
397-411
: updatePassword
改密码流程完整,包含验证、地址本更新、回滚机制;更新模式状态确保下次登录一致。
431-443
: verifyPassword
通过 verifyPassword({ passwordMode })
识别具体类型,并在生物识别时逻辑分支处理。结果与密码一起缓存,一次解锁后可复用。
packages/kit/src/components/Password/utils.ts (1)
8-8
: 正则检查:这行改动看上去很科学。
新增的正则可有效限制输入字符,只保留数字和点号。对 Passcode 校验非常实用。
packages/kit/src/components/Password/container/PassCodeProtectionSwitch.tsx (1)
1-20
: 实现思路清晰:组件命名单一,逻辑透明。
切换开关使用简便易懂,配合状态管理性能应无明显问题。观察异步更新是否及时响应即可。
packages/kit-bg/src/services/ServicePassword/types.ts (4)
10-13
: 分离密码模式:设计合乎逻辑。
EPasswordMode
区分了 passcode 与 password,减少后期维护负担。
15-27
: 常量命名:易懂且用途明确。
提供专门的 map 和阈值,提升可读性与可维护性。
29-30
: 人脸与指纹常量:延伸性不错。
初步预留生物识别扩展,后续对接更灵活。
32-33
: 密码长度常量:约束合理,增强安全性。
最小 8 位,最大 128 位,兼顾安全性与范围适度。
packages/kit/src/components/Password/components/PassCodeProtectionDialogContent.tsx (1)
1-29
: 组件职责单一:文案展示与开关集成。
界面层结构简洁明了,可读性好;与 Switch 组件相互配合流畅。
packages/kit/src/components/Password/container/PasswordUpdateContainer.tsx (8)
7-8
: 这两个新导入用于引用密码模式及其原子状态,用法看起来没问题。
25-25
: 使用 passwordMode
作为状态管理,让画面可动态显示密码或验证码,逻辑清晰。
28-30
: 这里根据模式选择最终密码的来源,写法简单直观。请确保外部数据正确传入。
36-36
: 对新密码进行加密操作,流程合理,注意加密或解密时处理异常。
42-42
: 将模式作为参数传给 updatePassword
,便于后端区分处理。实现合理。
46-46
: 成功提示文本改为 Passcode 形式,与新逻辑保持一致。
52-52
: 错误提示换成 Passcode,建议确认是否与全部提示保持统一。
63-63
: 将 passwordMode
传给组件,便于切换输入模式。组件配置显得完整。
packages/kit/src/views/CloudBackup/components/useResotrePasswordVerify.tsx (3)
20-20
: 将提示改为“输入你的 Passcode”,与整体改动一致,文案更直观。
30-30
: 占位符也改用相同文案,体验一致性良好。
59-59
: 描述信息更换为 Passcode 字样,可避免用户混淆密码与码。
packages/kit/src/components/Password/components/PassCodeInput.tsx (12)
1-2
: 文件头部导入 useEffect
、useState
,基础钩子用法正常。
3-14
: 导入 CodeField 与常量,明确 PIN 长度,结构清晰。
15-29
: 样式对象简洁,重点突出焦点状态与边框区分。
31-39
: 这里收集所有回调与控制选项,功能配置一目了然。
48-49
: pinValue
初始状态与 set 函数声明,便于实时更新输入值。
50-53
: 使用 useBlurOnFulfill
管理焦点,满足指定长度后失焦。
54-57
: useClearByFocusCell
提供清除功能,当聚焦单元时重置内容。
58-59
: 使用本地布尔状态 enableMask
,允许切换明文显示。
60-89
: 按输入状态渲染符号,或用 Cursor
标识焦点,UI 逻辑清楚。
90-95
: 根据 pinCodeFocus
控制焦点,让外部也可触发聚焦,灵活度好。
96-124
: onChangeText
中触发回调,一旦长度到达最大则调用 onComplete
,流程合理。
127-127
: 默认导出组件,写法无误,可被其他文件直接引入。
packages/kit/src/components/Password/hooks/usePasswordProtection.ts (6)
1-8
: 文件头部导入必要依赖并声明常量,准备工作合理。
9-32
: 初始化 hook 里各项状态,可灵活管理多种场景。代码布局直观。
33-50
: alertText
根据条件拼装文案,与国际化逻辑相配合,易读易扩展。
61-82
: useEffect
中定时更新剩余时间,时间到后清理定时器,流程正确。
83-99
: 通过返回值暴露各状态及 set 函数,方便外部调用。
101-101
: 导出默认 hook,便于跨组件共享密码保护逻辑。
packages/kit/src/views/Onboarding/pages/CreateWalet/BeforeShowRecoveryPhrase.tsx (1)
55-55
: 命名更新非常清晰。
好评!这样能让用户更明确区分“passcode”和“password”。
packages/kit/src/views/Setting/pages/Protection/index.tsx (5)
14-14
: 新引入的 PassCodeProtectionSwitch。
功能命名清晰,易于理解,值得采纳。
54-54
: “settings_passcode_bypass”命名修正。
与其他地方保持用词一致,改法准确。
89-91
: 提示文本改成“passcode bypass”描述。
这段文案读起来简洁,符合更新的用词。
93-100
: 新增「PassCode protection」设置部分。
新增的功能模块易读易懂,布局紧凑。
101-103
: 重置应用功能的说明文字。
文案简练明了,引导效果不错。
packages/kit/src/components/Password/container/PasswordVerifyPromptMount.tsx (2)
30-30
: 标题文案替换为“set passcode”。
改动准确,通用性更强。
58-58
: 标题文案替换为“enter passcode”。
与全局一致,提升用户理解。
packages/kit/src/provider/Container/AppStateLockContainer/components/AppStateLock.tsx (1)
120-120
: “login_forgot_passcode”按钮文本。
改成passcode后,更匹配系统语言环境,读起来通畅。
apps/ext/src/ui/renderPassKeyPage.tsx (2)
82-82
: 命名变更与Passcode概念保持一致。
此处使用ETranslations.auth_error_passcode_incorrect
能让错误提示更直观,整体逻辑无问题。
93-93
: 重复的错误信息提示处理一致。
同样更改为auth_error_passcode_incorrect
保持风格统一,继续保持。
packages/kit-bg/src/states/jotai/atoms/password.ts (3)
8-8
: 导入新枚举提升可读性。
EPasswordMode
的引入让密码模式更清晰,建议保持此做法。
74-77
: 初始化值确保一致性。
默认值都写明了,后续使用时避免意外情况。
86-93
: 动态切换passwordMode
逻辑合理。
如果未设置密码并且是原生平台,则默认切换为PASSCODE
,符合需求。
packages/components/src/forms/Form/index.tsx (3)
100-107
: 新增display
属性更灵活。
允许设置多种CSS display类型,让布局更好适配不同需求。
118-118
: 函数Field
接收display
参数。
让调用者更自由地配置字段可见性或布局。此改动简洁明了。
151-156
: 条件应用display
可读性高。
使用解构后传入 fieldset,逻辑清晰易懂。
packages/kit/src/views/Setting/pages/List/SecuritySection/index.tsx (2)
69-69
: 改用“passcode”与整体统一。
这里将“set_password”改为“set_passcode”,用词一致,易懂。
101-101
: 同类标题改动保持前后一致。
“global_change_passcode”与其他地方同步,让UI文案更统一。
packages/kit/src/views/CloudBackup/pages/Detail/index.tsx (1)
283-283
: 改用“passcode”更精准
保持术语一致,读者更容易理解。请确保相关界面文案也做同步。
packages/shared/src/errors/errors/appErrors.ts (5)
27-27
: 改为passcode相关key
用词统一能减少用户困惑。可继续检查其他地方是否同样更新。
172-172
: 修正错误key
请确认前端提示也改成passcode,保证一致。
199-199
: 更新默认错误key为passcode
好做法,用户更清楚提示含义。
211-211
: 更改为passcode验证
术语统一,减少疑惑。
222-222
: passcode提示一致性
统一错误信息,让用户更理解。
packages/kit/src/provider/Container/AppStateLockContainer/index.tsx (2)
4-4
: 新增Spinner组件
加载时给用户更明显反馈,操作体验更好。
88-88
: Suspense中添加交互提示
加上Spinner可让用户知道系统正在处理。
package.json (1)
121-121
: 新增验证码字段依赖
便于更好管理passcode输入场景,统一UI体验。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 5
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (6)
packages/components/src/forms/index.ts
(1 hunks)packages/kit/src/components/Password/components/PassCodeInput.tsx
(1 hunks)packages/kit/src/components/Password/components/PassCodeProtectionDialogContent.tsx
(1 hunks)packages/kit/src/components/Password/components/PasswordSetup.tsx
(2 hunks)packages/kit/src/components/Password/components/PasswordVerify.tsx
(8 hunks)packages/kit/src/components/Password/container/PasswordSetupContainer.tsx
(4 hunks)
🔇 Additional comments (57)
packages/kit/src/components/Password/components/PassCodeProtectionDialogContent.tsx (2)
22-22
: 导出语句符合规范
默认导出方式正确,保持代码简洁。
8-20
: 🛠️ Refactor suggestion
组件实现需要增强可访问性和可测试性
组件结构清晰,但建议做如下改进:
- 添加类型定义
- 增加可访问性属性
- 添加测试ID
-const PassCodeProtectionDialogContent = () => {
+const PassCodeProtectionDialogContent: FC = () => {
const intl = useIntl();
return (
- <XStack alignItems="center" gap="$3">
+ <XStack
+ alignItems="center"
+ gap="$3"
+ testID="passcode-protection-dialog"
+ role="dialog"
+ aria-label={intl.formatMessage({
+ id: ETranslations.Setting_Reset_app_description,
+ })}
+ >
<SizableText size="$bodyMdMedium" flex={1}>
{intl.formatMessage({
id: ETranslations.Setting_Reset_app_description,
Likely invalid or redundant comment.
packages/kit/src/components/Password/container/PasswordSetupContainer.tsx (5)
5-12
: 导入组件位置没问题,结构清晰。
这里导入的组件和常量都已按需使用,接口命名也保持一致,没发现冗余。
14-14
: EPasswordMode 的引入让逻辑更可读。
使用枚举严格区分密码模式,减少后期 Bug。
27-27
: 引入 PassCodeProtectionDialogContent 提示。
此组件能增强用户教育,让用户明白保护机制。推荐保持这种对话框的可配置性。
82-82
: 解构 passwordMode。
从 Atom 获取的值让组件状态单一、明确,建议保障调用端对其合法性有足够的测试。
156-156
: 向 PasswordSetup 传递 passwordMode。
在组件内使用同一枚举,统一口径。确保测试用例里验证该 props 是否有效接收。
packages/kit/src/components/Password/components/PasswordVerify.tsx (19)
15-23
: 更灵活的导入,方便拆分维护。
组件库引用清晰、易读。注意保持命名约定一致。
33-34
: 引入 PassCodeInput 无冲突。
此组件独立且易读。不会影响既有逻辑。
38-38
: 新增 passwordMode。
有助于区分展示逻辑,减少多处条件判断。
46-47
: alertText 与 confirmBtnDisabled 的可读性。
命名直观,可更精细地管理 UI 提示和按钮禁用状态。
50-50
: IPasswordVerifyForm 新增 passCode。
字段命名简洁。避免与旧的 password 混淆。
52-52
: 保留原有 password 字段与 passCode 并存。
有助于同时处理多种验证方式。
58-59
: alertText 与 confirmBtnDisabled 关联。
统一了错误或警告信息的处理,更清晰。
61-61
: passwordMode prop 用于条件渲染。
可方便在 UI 上做切换。注意不同模式下的输入校验是否充分。
70-70
: useForm defaultValues 更新。
初始化时兼容密码或 passcode,避免后续重置出错。
82-83
: 针对 mode 在 setFocus 的逻辑
避免用户混淆输入,默认聚焦对应控件,体验好。
95-97
: watch 的动态选择字段
表单中可实时监听 passCode 或 password,减少单独状态管理。
99-112
: biologyAuthIconName 的 memo 化
只在依赖变更时更新,减少不必要重渲染。
118-118
: 多操作集的 rightActions
交互思路清晰:未输入时显示生物按钮,已输入则显示查看与提交。
122-122
: onPress 触发 handleSubmit
表单提交转到 onInputPasswordAuth,表意佳。
137-137
: disabled 属性与 confirmBtnDisabled
逻辑分明。可读性好,给测试加一层保障。
146-146
: 依赖项需核实
有很多依赖在 useEffect / useMemo 中使用,确保不会漏加或重复依赖。
152-152
: 确认按钮禁用与提交的冲突
留意 confirmBtnDisabled 与验证状态的衔接,防止出现输入满足条件却按钮依然禁用的问题。
198-239
: 在密码模式时展示 Input
逻辑简单易懂,但请确认交互流程:如果用户切换为 passcode 后,又切回 password,是否填写信息会被保留。
241-288
: 在 passcode 模式时渲染 PassCodeInput
布局清晰,有进度感。可观察内部错误提示。
packages/kit/src/components/Password/components/PasswordSetup.tsx (22)
1-1
: 正确导入 React hooks。
可保持组件内状态管理简洁。
5-12
: 组件和基础表单的引用
看起来逻辑无冲突,函数式写法清晰。
13-13
: EPasswordMode 枚举
统一了密码模式常量,避免魔法数或字符串硬编码。
15-15
: platformEnv
侦测平台差异有助于差异化渲染或逻辑。
17-21
: utils 中的正则和方法
独立工具化,后续维护更轻松,少了代码重复。
23-23
: 新的 PassCodeInput 引入
让表单可复用相同输入控件。
28-30
: IPasswordSetupForm 扩展
加入 passCode、confirmPassCode 和枚举模式,避免在组件内多余判断。
34-34
: IPasswordSetupProps 新增 passwordMode
外部调用可显式传递选择。可提升可读性。
42-42
: 从 props 中解构 passwordMode
减少在组件内反复获取值。
48-52
: currentPasswordMode 与 passwordMode 同步问题
用 useEffect 同步 prop 改变时更新本地 state,逻辑合理。
58-61
: defaultValues 包含 passCode / confirmPassCode
使表单初始化更统一,防止空状态出现异常。
66-69
: passCodeFirstStep 的 useMemo
表达逻辑简洁,通过布尔值判断是否进入第二步。
70-78
: confirmBtnTextMemo
若处于第一步就显示“下一步”,否则显示“设置密码/Passcode”,好理解。
82-82
: onPassCodeNext
隔离第一步与第二步逻辑,一步到位地打开 passCodeConfirm。
85-99
: 密码模式下输入校验
对长度、空值等有明确 rule。用户容易理解。
100-106
: minLength 8 字符
对安全性有一定保证,需与产品需求吻合。
108-122
: 最大长度 128
大多数场景足够且不会过多限制用户。
124-148
: 确认密码字段
与第一字段比对确保一致,减少错误输入。
149-198
: <> 代码块
将密码模式与 passcode 分步渲染分离,可读性好。
234-243
: PassCodeInput onPinCodeChange
清空 form 错误方便用户重新输入。
244-285
: 确认 passCode
对比一次性匹配,不需要额外网络请求,性能好。
Line range hint 283-322
: 切换密码模式按钮
一键重置,还原到初始表单。用户体验简洁。
packages/components/src/forms/index.ts (1)
9-9
: PinCodeValidator 的导出
可与应用层配合校验输入,不会破坏现有导出。
packages/kit/src/components/Password/components/PassCodeInput.tsx (8)
1-9
: 新增组件结构
文件开头导入必要包,逻辑清晰,适合独立维护。
14-30
: props 定义全面
包含回调和各种可选项,覆盖多用例。
31-42
: 集中处理 pinValue
内部 state 与外部回调配合好,记得避免冲突更新。
44-50
: Styling 定义简洁
cell 样式小巧,宽高可在 UI 适配时灵活调整。
51-85
: renderCell 自定义
轻量渲染,布尔判断简单。可后续抽成独立组件提复用。
86-90
: 聚焦与 pinCodeFocus
自动聚焦单元格时机合理,适配多场景。
92-117
: CodeField 绑定 onChangeText
实时更新 pinValue 并执行回调。若收满 6 位且非禁用就触发 onComplete,逻辑顺畅。
129-129
: 默认导出 PassCodeInput
组件暴露简洁易用,后续扩展保持灵活。
packages/kit/src/components/Password/components/PassCodeProtectionDialogContent.tsx
Show resolved
Hide resolved
packages/kit/src/components/Password/container/PasswordSetupContainer.tsx
Show resolved
Hide resolved
packages/kit/src/components/Password/components/PasswordVerify.tsx
Outdated
Show resolved
Hide resolved
packages/kit/src/components/Password/components/PasswordSetup.tsx
Outdated
Show resolved
Hide resolved
packages/kit/src/components/Password/components/PassCodeInput.tsx
Outdated
Show resolved
Hide resolved
Signed-off-by: 王山栋 <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 7
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (5)
packages/components/src/forms/Form/index.tsx
(3 hunks)packages/kit/src/components/Password/components/PassCodeInput.tsx
(1 hunks)packages/kit/src/components/Password/components/PasswordSetup.tsx
(2 hunks)packages/kit/src/components/Password/components/PasswordVerify.tsx
(8 hunks)packages/kit/src/components/Password/hooks/usePasswordProtection.ts
(1 hunks)
🔇 Additional comments (10)
packages/kit/src/components/Password/components/PasswordSetup.tsx (2)
42-52
: 同步外部状态的做法很好。
当外部 passwordMode
变动时,通过 useEffect
更新本地 currentPasswordMode
,逻辑清晰也避免了额外的重复渲染。
201-282
: 校验逻辑与界面切换都较完善。
这个区块里根据 currentPasswordMode
动态渲染 PassCode 的表单规则清晰,包含长度与正则校验,用户体验完整。若有特殊情况(例如用户想中途切换回密码),请确保已有流程可正常重置此处输入。
packages/kit/src/components/Password/components/PassCodeInput.tsx (1)
34-50
: 本地状态 pinValue
管理流程简明。
useClearByFocusCell
的使用场景明确,避免重复渲染。后续如果要支持更多校验,建议统一在外部再包一层控制逻辑,并保持内部组件更纯粹。
packages/components/src/forms/Form/index.tsx (1)
100-107
: 新增 display
与 errorMessageAlign
很灵活。
让 Fieldset
更自由地配置显示方式,也可以自定义错误文案排版。请注意与现有 UI 样式统一。
Also applies to: 112-112, 119-120
packages/kit/src/components/Password/components/PasswordVerify.tsx (3)
38-39
: 在 IPasswordVerifyProps
中为 disableInput
提供可选项很实用。
这样能在加载或锁定状态下,轻松禁止输入并减少意外操作。
83-85
: 在首次渲染后进行延迟聚焦常见且合理。
通过 setTimeout
避免过早调用焦点,兼容一些动画或布局未就绪的情况。
249-278
: PassCode 校验与按钮交互写得不错。
逻辑拆分清爽,editable
与 disabledComplete
搭配清晰。若后续需支持更多校验规则,可以考虑与后端同步配置。
packages/kit/src/components/Password/hooks/usePasswordProtection.ts (3)
1-4
: 逻辑简单清晰,导入依赖合理,没有发现明显问题。
9-31
: 使用多个 useState 管理状态,结构直观,函数命名清楚,易理解。
32-61
: 通过 useMemo 动态生成 alertText,依赖齐全,判断逻辑明了。
packages/kit/src/components/Password/components/PasswordSetup.tsx
Outdated
Show resolved
Hide resolved
packages/kit/src/components/Password/components/PasswordVerify.tsx
Outdated
Show resolved
Hide resolved
packages/kit/src/components/Password/hooks/usePasswordProtection.ts
Outdated
Show resolved
Hide resolved
packages/kit/src/components/Password/hooks/usePasswordProtection.ts
Outdated
Show resolved
Hide resolved
Signed-off-by: 王山栋 <[email protected]>
Signed-off-by: 王山栋 <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
🔭 Outside diff range comments (1)
packages/kit/src/components/Password/container/PasswordVerifyContainer.tsx (1)
Line range hint
301-328
: 同一函数处理 passwordMode 下不同输入,易于扩展。
当后续又新增其他模式时,可将 finalPassword 的计算抽到通用方法里。
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (6)
packages/kit/src/components/Password/components/PassCodeInput.tsx
(1 hunks)packages/kit/src/components/Password/components/PasswordSetup.tsx
(1 hunks)packages/kit/src/components/Password/components/PasswordVerify.tsx
(8 hunks)packages/kit/src/components/Password/container/PasswordUpdateContainer.tsx
(3 hunks)packages/kit/src/components/Password/container/PasswordVerifyContainer.tsx
(8 hunks)packages/kit/src/components/Password/hooks/usePasswordProtection.ts
(1 hunks)
🔇 Additional comments (30)
packages/kit/src/components/Password/container/PasswordUpdateContainer.tsx (8)
7-8
: 导入看起来没问题。语义清晰。
25-25
: 使用 Atom 获取状态逻辑简明。
28-30
: 根据模式选择最终密码的写法很直观。
请确认是否需检查 confirmPassCode
或 confirmPassword
的空值情况。
35-35
: 为新密码文本调用 encodeSensitiveText,符合预期。
41-41
: updatePassword 额外接收 mode 参数,逻辑一致。
45-45
: 成功提示切换为 passcode,文本用词更准确。
51-51
: 错误提示也同步到 passcode,风格统一。
62-62
: 将 passwordMode 传给 PasswordSetup,组件间模式保持一致。
packages/kit/src/components/Password/hooks/usePasswordProtection.ts (5)
9-9
: 函数封装清晰,状态与逻辑分开便于维护。
保持钩子功能单一,让调用方只专注使用即可。
31-37
: isProtectionTime 的计算逻辑很直观。
以 useMemo 返回布尔值减轻重复计算负担。小心依赖值完整性,代码中已列出依赖,很好。
47-61
: 国际化处理简洁易读。
alertText 使用不同场景翻译,易扩展。
75-89
: 定时器清理规范。
useEffect 中先清理再重新设定,避免内存泄漏。逻辑正确。
96-110
: 返回的状态与方法命名统一,易读易用。
API 完整度高,保持这类返回对象易于扩展。
packages/kit/src/components/Password/components/PasswordSetup.tsx (4)
50-54
: currentPasswordMode 与依赖无冲突。
随 props 更新状态,不会引起死循环。逻辑良好。
68-71
: passCodeFirstStep 使用 useMemo。
判断简明扼要。可读性佳。
82-83
: setPassCodeConfirm(true) 只在下一步时调用。
单独函数 onPassCodeNext 清晰易懂。
320-329
: 切换模式时先重置 form,避免状态残留。
可防止新模式混用上一个模式的输入。
packages/kit/src/components/Password/container/PasswordVerifyContainer.tsx (3)
57-57
: passwordMode 与各分支互相独立,无额外依赖。
后续与多种密码验证集成更方便。
171-178
: 生物验证失败计数合理递增。
若超限就禁用生物验证,避免无限次尝试。
330-383
: 超出尝试次数后重置 app 安全策略合理。
保留必要的日志输出有助排查用户端问题。
packages/kit/src/components/Password/components/PassCodeInput.tsx (3)
36-36
: pinValue 独立管理清晰。
搭配外部 onPinCodeChange,父组件也能控制同步。
84-88
: 每当 clearCode 改变就清空 pinValue。
行为直观,避免残留输入。
90-115
: CodeField 与回调组合设计好用。
当输入长度满足 PIN_CELL_COUNT 时自动调用 onComplete,很直观。
packages/kit/src/components/Password/components/PasswordVerify.tsx (7)
59-60
: 增加 alertText 与 confirmBtnDisabled 的支持。
能更灵活地显示额外文案并禁用确认按钮,用户体验更友好。
72-72
: 默认值同时包含 password 与 passCode。
支持两种模式的输入,用一个 form 简化数据管理。
83-85
: 初始首次不启用生物验证时聚焦正确字段。
延时 500ms 设置焦点,避免与其他初始化阶段冲突。
102-114
: 生物认证图标判断逻辑清晰。
针对不同平台也做了特定图标处理,不会产生歧义。
158-166
: 错误后清空 passCode 或聚焦密码字段。
做法逻辑严谨,有利于重试操作。
206-240
: Password 模式下使用 EyeOutline/EyeOffOutline + ArrowRightOutline 方案不错。
能一目了然地控制可视与提交,代码简洁。
250-302
: PassCode 模式直接封装 PassCodeInput。
表单校验与 onComplete 配合流畅,让用户输入体验一致。
Summary by CodeRabbit
新特性
PassCodeInput
组件,用于输入六位数的 PIN 码。PassCodeProtectionDialogContent
和PassCodeProtectionSwitch
组件,增强了用户界面中的密码保护功能。PasswordSetup
和PasswordVerify
组件现支持在密码和通行码模式之间切换。错误修复
文档