使用电子邮件而不是 userId 重新发送验证, 转发 X- Forwarded- Host
安全服务/登记/再发核查 期待在体内的电子邮件, 非用户ID( 登录错误响应从未包含) 。 未来 X-Forwarded-Host 这样后端就可以解决正确的组织.
Add dao.repositories to JPA scan so EmailTemplateRepository is found
Same pattern as KamoInitializerService — explicit basePackages overrides default scanning and must include every package that has repositories.
通过安全代理而不是通用消息传递上游错误正文
前回 {error: "上游出错"}在非-2xx上,失去真实 安全服务发送的错误消息 。 现在直接转发状态代码和机身.
Align registration field names and response shape with frontend contract
Frontend sends nameFirst/nameLast but controller read firstName/lastName, causing 400 "First name is required". Success response now returns {status, userId, al...
防止 Stale 年龄 ReqType 缓存错误显示年龄检查
- Org路线:将Redis TTL从24h降低到5min并增加年龄ReqType Member 以阻断检测, 这样安全字段在 DB 更改后保持新鲜 。 - 注册 Flow: 默认应在 org 时插入年龄检查为虚假 装入而不是真实,防止投机年龄检查插入
Add SecurityService and dao.repositories to EnableJpaRepositories scan
UserPhoneLookupRepository in recovery package was not picked up because EnableJpaRepositories only listed dao.repos and commerce. Added the SecurityService base...
设置浏览器标签标题为“ 注册 - {org name} ”
动态MetaLoader现在呼叫使用ThemeConfig并更新文档. 标题 到“ register - {org.title} ” 。 静态后退 布局.tsx 从“ 创建下一个 App ” 改为“ 注册 ” .
解析声明前所用的步骤中的 TS 错误和 Capcha 样式
移动QQ 在使用效果上方使用备忘录 依赖它们; 导入 CSSVariables 类型并用于 Capcha-widget 样式道具 .
Add dao.repositories to EnableJpaRepositories scan
EmailTemplateRepository lives under dao.repositories.email, not dao.repos, so it was not picked up as a Spring bean.
在电子邮件中添加错误的 DEFAULT 列定义
Hibernate的计程器 生成 ALTER TABLE,没有默认, 无法使用已有行的表格。 定义强迫它 包括 DEFAULT 假的, 这样现有的行会被正确配置 .
Resolve duplicate emailTemplateServiceClient bean conflict
**************** and **************** were identical @Components with the same default bean name, causing **************** at startup. Delete the duplicate in r...
Bump kamo-shared-library to 1.4.0
Docker Stage 1 builds kamo-shared-library main (now 1.4.0) and installs it to the local .m2; the service pom still referenced 1.0.0 which Maven could not find, ...
应用SP6正确性和执行质量修正
C1: 使用 NEXT PUBLIC H*** TE KEY env var 而不是硬码占位符 C2: 更改注册 Response.userId 和全部 API 参数从数字到字符串( CockroachDB 独有的 rowid 精度) C3: 手柄中清晰的 stale *** sord (set***Token (nu...
Address 4 code-review findings in registration and login paths
- Hide raw exception message in /register 500 path; log instead - Fail-closed (503) on email-verified DB check failure in login - verifyEmailToken throws if use...
Append Z to dateCommitted so JS parses it as UTC
LocalDateTime.toString() produces no timezone designator, causing JavaScript's new Date() to treat the UTC value as local time and display timestamps 7-8 hours ...
Convert PT midnight cutoff to UTC for today-count query
Commits are stored in UTC but the cutoff was a naive LocalDateTime in PT, causing yesterday-evening PT commits (00:00–06:59 UTC) to be counted as today.
用白色 SVG 替换所有 CSS- filter 标识例
导航、 SubNavigation、 脚印、 SubFooter 和预装器全部使用 相同的断裂滤镜亮度- 0倒数模式。 替换为 横跨全白.svg.
在页脚中使用白色的 SVG 标志而不是 CSS 过滤器
与"导航"相同的固定——IOS Safari上嵌入了背景-过滤器上的CSS过滤器不可靠.
护卫队的色彩设计与
DynamicMetaLoader可以给赢得级联的远程CSS注入. 添加中 ! 重要确保色彩策略: 黑暗永远不会被主题样式表所覆盖 .
从TouchOptimized 中排除页脚和导航链接
Touchoptimized 正在为所有 <a> 元素设置短于 44px,包括页脚导航链接(~20px高). 这在水合时运行 硬刷新,使每个 <li> 弹性项目高44px并产生 在页脚链接栏中显示双相距。 脚印/导航链接具有可访问上下文,不需要强制触摸目标.
使用预发白 SVG 标志, 而不是 CSS 过滤器
在iOS Safari上, 生成标志- full-white.svg 并设置所有填充到 #ffffff并加载 直接——没有过滤器,没有浏览器颤音,在所有设备上保证为白色.
锁定 Tailwind 暗模式变体到基于类, 绝不使用 OS 媒体查询
Tailwind v4 默认为暗: 用于响应偏好- color- scheme (OS 偏好) 的公用设施. @ variant 覆盖确保黑暗: 类只在 . dark 类时激活 显示在 DOM 中 —— OS 永远不能翻转任何设备上的颜色 .
在标识链接上使用内置过滤样式进行可靠的白色渲染
在img元素上的tailwind过滤类在移动浏览器之间不一致. 锚地元素上的内置样式保证亮度( 0)倒数(1) 适用于所有地方.
强制暗色化学, 浏览器从不应用光模式渲染
将 Global.cs 中的"光"改为"暗",生成Viewport 和 html 元素样式 – 这阻止了浏览器渲染 SVG 和本地 UI 在光线模式下,这导致标志在黑暗背景下出现黑色.
防止标志在移动行后渲染
带有 CSS 过滤器的 Div 包装器创建了相冲突的新堆叠上下文 在移动浏览器上带有页眉的背景过滤器,导致标志被画出 在标题后的背景。 直接在图像元素上应用过滤类.
在 JumpToBar 和 PreviewBanner 上解析滚动条和移动剪辑
- 添加溢出: 隐藏到 JumpToBar 内置容器以防止垂直滚动条 - 允许PreviewBanner内容在手机上包装,所以文本不剪接在肖像手机上
在页脚链接列表中将空格Y-4替换为内含的弹性空格
Tailwind space-y-4 使用: 与 CSS 相竞争的地方( ) (特异性 0) 装入硬刷新导致垂直间隔不一致。 内入 样式被嵌入 SSR HTML 并立即应用,独立于 外部 CSS 负载顺序 .
Set Traefik externalTrafficPolicy=Local to preserve client IP
With the default "Cluster" policy, kube-proxy SNATs external traffic to the node IP before forwarding to Traefik. That caused Traefik to see the node IP as the ...
在所有地方添加缺失的请求集成 i18n 密钥
在"需要自定义集成吗"下"提交请求"按钮? 反恐中心 在/整合中 掉回了原始的密钥 QQ 因为钥匙没有被定义 在所有22个地方添加了密钥 并清理了旧的定制 CtaSubheading 副本 仍然 引用 REST API / 企业级语言.
后链接目标到 www.kamocrm.com (canonical host)
PoweredByKamo组件运出指向顶端 https://kamocrm.com/ 但Canonical Kamo-marketing主机是https://www.kamocrm.com/. 更新所有三个变异的螺旋,使进站的SEO信号累积 而不是横跨最高点和www.
Clean up legacy analytics deployment on each CI run
Delete old analytics deployment, service, and ingressroute that conflict with the kamo-analytics deployment managed by its own CI/CD pipeline.
Strip X-Frame-Options header in iframe-compatible middleware
Set X-Frame-Options to empty string to remove the SAMEORIGIN value that was being inherited, allowing CSP frame-ancestors to control iframe embedding instead.
